Ich habe mich über die Funktionen des Unterprozesses - call, check_call, check_output - informiert und verstehe, wie die einzelnen Funktionen funktionieren und sich in ihrer Funktionalität voneinander unterscheiden. Ich verwende derzeit check_output, damit ich auf das stdout zugreifen kann, und habe "try block" verwendet, um die Ausnahme wie folgt abzufangen:
# "cmnd" is a string that contains the command along with it's arguments.
try:
cmnd_output = check_output(cmnd, stderr=STDOUT, shell=True, timeout=3, universal_newlines=True);
except CalledProcessError:
print("Status : FAIL")
print("Output: \n{}\n".format(cmnd_output))
Das Problem, auf das ich stoße, ist, wenn eine Ausnahme ausgelöst wird, "cmnd_output" nicht initialisiert wird und keinen Zugriff auf stderr hat und die folgende Fehlermeldung angezeigt wird:
print("Output: \n{}\n".format(cmnd_output))
UnboundLocalError: local variable 'cmnd_output' referenced before assignment
Ich denke, das liegt daran, dass die Ausnahme dazu führt, dass der "check_output" sofort ohne weitere Verarbeitung, auch bekannt als Zuweisung zu "cmnd_output", im try-Block abgebrochen wird. Bitte korrigieren Sie mich, wenn ich falsch liege.
Gibt es eine Möglichkeit, auf stderr zuzugreifen (es ist in Ordnung, wenn es an stout gesendet wird) und Zugriff auf den Exit-Code zu haben? Ich kann anhand des Exit-Codes manuell prüfen, ob bestanden / nicht bestanden wurde, ohne dass eine Ausnahme vorliegt.
Danke, Ahmed.
ret = subprocess.check_output(cmd , stderr=STDOUT,shell=True)NameError: global name 'STDOUT' is not defined