python + come stampare il valore che proviene da os.system

perché questo semplice script python non stampa la vera versione redhat?

version = os.system( " cat /etc/redhat-release | awk \"{print $7}\" " ) print ("my version is " ,version) 

quando lo eseguo

abbiamo:

7.2 ("my version is ", 0) 
  1. perché otteniamo 0 invece 7.2?
  2. come evitare di ottenere la versione – 7.2 da os.system?

Commenti

  • Python2 o Python3?
  • Dovrebbe essere spostato in SO?

Risposta

os.system() esegue semplicemente il processo , non “t cattura loutput:

Se il comando genera un output, verrà inviato al flusso di output standard dellinterprete.

Il valore restituito è il codice di uscita del processo:

Su Unix, il valore di ritorno è lo stato di uscita del processo codificato nel formato specificato per wait ().

Dovrai utilizzare qualcosa come subprocess.check_output() o subprocess.Popen() direttamente per acquisire loutput.

>>> arch = subprocess.check_output("uname -a | awk "{print $9}"", shell=True); >>> arch "x86_64\n" 

Commenti

  • ok, ma come acquisire solo x86_64 senza " \ n "?
  • @janga per lesempio precedente , usa arch [: – 1]?
  • ok, funziona, unaltra ultima domanda, come evitare di stampare da os.system, ad esempio os.system (' sed -is " /7.0/$new_version/g" / tmp / file), stampa la stringa che vogliamo sostituire
  • Per rimuovere la nuova riga, usa .rstrip()
  • puoi mostrarmi per favore tutta la sintassi?

Risposta

Puoi utilizzare il modulo subprocess e ottenere questo risultato abbastanza facile.

#!/usr/bin/python3 import subprocess getVersion = subprocess.Popen("awk "{print $7}" /etc/redhat-release", shell=True, stdout=subprocess.PIPE).stdout version = getVersion.read() print("My version is", version.decode()) 

Anche per awk, puoi utilizzare sed "s/[^0-9_.-]//g /etc/redhat-release. Questo estrarrà solo il numero di versione e non è necessario sapere quale sia il numero di versione del campo, il che lo rende più indipendente dalla piattaforma.

Commenti

  • è questa variabile – versione – è senza " \ n ", perché voglio utilizzare questa variabile in seguito nel comando sed allinterno di python
  • Non ' t ottenere la tua domanda. Qualunque cosa tu stia facendo ' non sembra avere senso.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *