python + hur man skriver ut värde som kommer från os.system

varför detta enkla python-skript inte skriver ut den verkliga redhat-versionen?

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

när jag kör den

fick vi:

7.2 ("my version is ", 0) 
  1. varför vi får 0 istället 7.2?
  2. hur man undviker att få version – 7.2 från os.system?

Kommentarer

  • Python2 eller Python3?
  • Bör detta flyttas till SO?

Svar

os.system() kör bara processen , det fångar inte utdata:

Om kommandot genererar någon utdata kommer den att skickas till tolkens standardutmatningsström.

Returvärdet är processens utgångskod:

På Unix är returvärdet utgångsstatus för processen kodad i det format som anges för väntan ().

Du måste använda något som subprocess.check_output() eller subprocess.Popen() direkt för att fånga utdata.

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

Kommentarer

  • ok, men hur man bara kan fånga x86_64 utan " \ n "?
  • @janga för ovanstående exempel , använd arch [: – 1]?
  • ok, fungerar, en annan sista fråga, hur man undviker utskrift från os.system, till exempel os.system (' sed -is " /7.0/$new_version/g" / tmp / file), dess utskrift av strängen som vi vill ersätta
  • För att ta bort den nya raden, använd .rstrip()
  • kan du visa mig snälla all syntax?

Svar

Du kan använda subprocess -modulen och uppnå detta ganska 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()) 

Även för awk del kan du använda sed "s/[^0-9_.-]//g /etc/redhat-release. Detta extraherar bara versionsnumret och behöver inte veta vilket fältversionnummer som gör det mer plattformsoberoende.

Kommentarer

  • är denna variabel – version – är utan " \ n ", för jag vill använda den här variabeln senare i sed-kommandot inuti pythonen
  • Jag förstår inte '. Vad du än gör gör ' t verkar vettigt.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *