Wie interpretieren status-code in Python-Befehle.getstatusoutput()
In einem stellt sich die Frage,, fragte ich, wo finden Sie die Dokumentation für die C-Funktion "warten Sie." Dies war ein Versuch, um herauszufinden, return-codes für die Befehle.getstatusoutput () - Modul. Stackoverflow kam durch, aber die Dokumentation nicht helfen. Hier ist, was mich verwirrt:
#!/usr/bin/python
import commands
goodcommand = 'ls /'
badcommand = 'ls /fail'
status, output = commands.getstatusoutput(goodcommand)
print('Good command reported status of %s' % status)
status, output = commands.getstatusoutput(badcommand)
print('Bad command reported status of %s' % status)
Beim laufen auf OS X (Leopard) bekomme ich folgende Ausgabe: (die Spiele der Dokumentation).
$ python waitest.py
Good command reported status of 0
Bad command reported status of 256
Unter OS X ist dabei ein "ls /fail ; echo $?" erhält man folgende Ausgabe:
$ ls /fail ; echo $?
ls: /fail: No such file or directory
1
Beim laufen auf Linux (Ubuntu Hardy) bekomme ich folgende Ausgabe:
$ python waitest.py
Good command reported status of 0
Bad command reported status of 512
Unter Ubuntu tun, "ls /nicht bestanden" wird ein 2:
$ ls /fail ; echo $?
ls: cannot access /fail: No such file or directory
2
Also Python zu sein scheint Multiplikation status-codes durch 256. Huh? Ist das irgendwo dokumentiert?
commands.getstatusoutput()
warum sind die exitcodes, multipliziert mit 256?" direkt und mit Beispiel-code. Die beiden anderen Antworten, die mehr oder weniger sagen "verwenden subprocess
statt commands.getstatusoutput()
" oder "hier ist, wie zu verwenden Teilprozess".InformationsquelleAutor Schof | 2009-10-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine Reihe von Funktionen in
os
Modul (os.WIFCONTINUED
,os.WIFSTOPPED
,os.WTERMSIG
,os.WCOREDUMP
,os.WIFEXITED
,os.WEXITSTATUS
,os.WIFSIGNALED
,os.WSTOPSIG
), Sie entsprechen Makros aus warten(2) Handbuch. Sie sollten Sie verwenden, um zu interpretieren, den status-code.Z. B. der exit-code, die Sie verwenden sollten
os.WEXITSTATUS(status)
Eine bessere Idee würde sein, wechseln Sie zu
subprocess
Modul.InformationsquelleAutor abbot
Wow. Die Einsicht, dass es durch Multiplikation mit 256 und hab mir da. Die Suche nach "python-Befehlen +256", hab mich auf eine Python-Modul Für Die Woche Artikel, der erklärt, was Los ist.
Hier ist ein Ausschnitt von dieser Seite:
Und einige von Doug code:
insight that it was multiplying by 256
InformationsquelleAutor Schof
Blick auf
commands.py
:Sehen wir
sts
hält den Wert vonos.popen(...).close()
. Blick auf dass - Dokumentation,os.popen(...).close()
gibt den Wert vonos.warten
:Schwerpunkt war meins. Ich Stimme zu, dass diese "Codierung" ist nicht sonderlich intuitiv, aber zumindest war es ziemlich offensichtlich, auf einen Blick, dass es war wird multipliziert/bit-verschoben.
InformationsquelleAutor Mark Rushakoff
Ich denke, dass die code-Erkennung ist falsch.
"Wenn eine core-Datei erzeugt wurde, das höchste bit des low-byte gesetzt ist." bedeutet 128.
so, ich denke, die core-Linie sollte
InformationsquelleAutor Felix Labrecque