de ce acest script simplu Python nu tipărește versiunea redhat reală?
version = os.system( " cat /etc/redhat-release | awk \"{print $7}\" " ) print ("my version is " ,version)
când îl rulez
avem:
7.2 ("my version is ", 0)
- de ce primim 0 în schimb 7.2?
- cum să evitați obținerea versiunii – 7.2 de la os.system?
Comentarii
- Python2 sau Python3?
- Ar trebui să fie mutat în SO?
Răspuns
os.system()
doar execută procesul , nu captează ieșirea:
Dacă comanda generează o ieșire, aceasta va fi trimisă la fluxul de ieșire standard de interpretare.
Valoarea returnată este codul de ieșire al procesului:
Pe Unix, valoarea returnată este starea de ieșire a procesului codificat în formatul specificat pentru wait ().
Va trebui să utilizați ceva de genul
subprocess.check_output()
sausubprocess.Popen()
direct pentru a capta rezultatul.>>> arch = subprocess.check_output("uname -a | awk "{print $9}"", shell=True); >>> arch "x86_64\n"
Comentarii
- ok, dar cum să capturați numai x86_64 fără " \ n "?
- @janga pentru exemplul de mai sus , utilizați arch [: – 1]?
- ok, funcționează, o altă ultimă întrebare, cum să evitați tipărirea din os.system, de exemplu os.system (' sed -is " /7.0/$new_version/g" / tmp / file), imprimă șirul pe care dorim să îl înlocuim
- Pentru a elimina noua linie, utilizați
.rstrip()
- îmi puteți arăta vă rog toată sintaxa?
Răspuns
Puteți utiliza modulul subprocess
și puteți realiza acest lucru destul de ușor.
#!/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())
De asemenea, pentru awk
parte, puteți utiliza sed "s/[^0-9_.-]//g /etc/redhat-release
. Acest lucru va extrage doar numărul versiunii și nu trebuie să știe care este numărul versiunii câmpului, ceea ce îl face mai independent de platformă.
Comentarii
- este această variabilă – versiune – este fără " \ n ", deoarece vreau să folosesc această variabilă mai târziu în comanda sed din interiorul python
- Nu ' nu primesc întrebarea dvs. Orice faceți nu face ' să pară că are sens.