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)
- warum wir bekommen 0 statt 7.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()
odersubprocess.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.