Ich habe den stderr mit dem Subprozessmodul getestet. Wenn ich einen einfachen Test mit Shell = True mit dem Linux-Shell-Befehl ls
absichtlich schlecht getippt schreiben:Python: stderr mit Shell = True oder Shell = False im Subprozessmodul
p=subprocess.Popen(["lr"],stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out, err=p.communicate()
print ("standard error")
print(err)
gibt es die üblichen aus der Schale: lr: command not found
.
Aber wenn shell=False
, ich verstehe nicht ganz, warum das Programm einen Fehler hat
Traceback (most recent call last):
File "importInteresantes.py", line 6, in <module>
p=subprocess.Popen(["lr"],stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=False)
File "/usr/lib/python2.7/subprocess.py", line 390, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1024, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Ausführung dachte ich, dass es mir die gleiche Ausgabe geben würde. Ist der Code falsch oder ist der Standpunkt, dass ich den gleichen stderr erhalten soll?
HINWEIS: Für den Fall, ich habe auch versucht, mit python3
Die Mechanismen zum Starten des Befehls sind in den beiden Fällen sehr unterschiedlich. Warum erwarten Sie genau, dass die Fehlerdiagnose identisch ist? – NPE
"lr: Befehl nicht gefunden" war eine Shell-Fehlermeldung. Wenn Sie keine Shell verwenden, haben Sie keine Shell, um Shell-Fehlermeldungen für Sie anzuzeigen. – jasonharper
Aber was ich erwarte ist, dass das Programm zumindest läuft und dann ein Fehler auftaucht. Nicht dass es überhaupt nicht laufen könnte. Also kannst du nicht für die Fälle wissen, dass ich falschen Befehl mit Python eintippe? Ich habe auch gehört, dass die Verwendung von 'shell = True 'riskant sein kann –