Python + Wie drucke ich einen Wert, der von os.system stammt?

Warum druckt dieses einfache Python-Skript nicht die echte Redhat-Version?

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

wenn ich es ausführe

haben wir:

7.2 ("my version is ", 0) 
  1. warum wir bekommen 0 statt 7.2?
  2. Wie vermeide ich, Version 7.2 von os.system zu erhalten?

Kommentare

  • Python2 oder Python3?
  • Sollte dies nach SO verschoben werden?

Antwort

os.system() führt nur den Prozess aus , erfasst die Ausgabe nicht:

Wenn der Befehl eine Ausgabe generiert, wird diese an den Standardausgabestream des Interpreters gesendet.

Der Rückgabewert lautet Der Exit-Code des Prozesses:

Unter Unix ist der Rückgabewert der Exit-Status des Prozesses, der in dem für wait () angegebenen Format codiert ist.

Sie müssen so etwas wie subprocess.check_output() oder subprocess.Popen() direkt, um die Ausgabe zu erfassen.

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

Kommentare

  • ok, aber wie kann man nur das x86_64 ohne " \ n " erfassen?
  • @janga für das obige Beispiel , benutze arch [: – 1]?
  • ok, funktioniert, eine weitere letzte Frage, wie man das Drucken von os.system vermeidet, zum Beispiel os.system (' sed -is " /7.0/$new_version/g" / tmp / file) gibt die Zeichenfolge aus, die ersetzt werden soll
  • Um den Zeilenumbruch zu entfernen, verwenden Sie .rstrip()
  • Können Sie mir bitte die gesamte Syntax zeigen?

Antwort

Sie können das Modul subprocess verwenden und dies ziemlich einfach erreichen.

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

Auch für die awk Teil können Sie sed "s/[^0-9_.-]//g /etc/redhat-release verwenden. Dadurch wird nur die Versionsnummer extrahiert und es muss nicht bekannt sein, welche Feldversionsnummer die Plattformunabhängigkeit erhöht.

Kommentare

  • ist Diese Variable – Version – ist ohne " \ n ", da ich diese Variable später im Befehl sed im Python verwenden möchte
  • Ich ' verstehe Ihre Frage nicht. Was auch immer Sie tun, ' scheint keinen Sinn zu ergeben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.