python + cum se imprimă valoarea care vine de la os.system

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) 
  1. de ce primim 0 în schimb 7.2?
  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() sau subprocess.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.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *