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)
- perché otteniamo 0 invece 7.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()
osubprocess.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.