python + hvordan du skriver ut verdi som kommer fra os.system

hvorfor dette enkle python-skriptet ikke skriver ut den virkelige redhat-versjonen?

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

når jeg kjører den

fikk vi:

7.2 ("my version is ", 0) 
  1. hvorfor vi får 0 i stedet 7.2?
  2. hvordan unngår man å få versjon – 7.2 fra os.system?

Kommentarer

  • Python2 eller Python3?
  • Skal dette flyttes til SO?

Svar

os.system() bare kjører prosessen , den fanger ikke utdataene:

Hvis kommandoen genererer noen utdata, vil den sendes til tolkens standard utgangsstrøm.

Returverdien er utgangskoden for prosessen:

På Unix er returverdien utgangsstatus for prosessen som er kodet i formatet som er spesifisert for ventetid ().

Du må bruke noe sånt som subprocess.check_output() eller subprocess.Popen() direkte for å fange utdataene.

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

Kommentarer

  • ok, men hvordan fanger du bare x86_64 uten " \ n "?
  • @janga for eksemplet ovenfor , bruk arch [: – 1]?
  • ok, fungerer, et annet siste spørsmål, hvordan man kan unngå utskrift fra os.system, for eksempel os.system (' sed -is " /7.0/$new_version/g" / tmp / file), den skriver ut strengen vi vil erstatte
  • For å strippe den nye linjen, bruk .rstrip()
  • kan du vise meg snill all syntaksen?

Svar

Du kan bruke subprocess -modulen og oppnå dette ganske enkelt.

#!/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()) 

Også for awk del, kan du bruke sed "s/[^0-9_.-]//g /etc/redhat-release. Dette trekker bare ut versjonsnummeret og trenger ikke å vite hvilket feltversjonsnummer som er som gjør det mer plattformuavhengig.

Kommentarer

  • er denne variabelen – versjon – er uten " \ n ", fordi jeg vil bruke denne variabelen senere i sed-kommandoen inne i pythonet
  • Jeg får ikke ' spørsmålet ditt. Uansett hva du gjør gjør ' t ser ut til å være fornuftig.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *