Welcher Unterschied zwischen subprocess.call () und subprocess.Popen () macht PIPE für das erstere weniger sicher?
Ich habe mir die Dokumentation für beide angesehen.
Diese Frage wird durch den Kommentar von J.F. hier veranlasst:Ausgabe von subprocess.call () abrufen
Die aktuelle Python-Dokumentation fürsubprocess.call()
sagt folgendes über die Verwendung vonPIPE
zumsubprocess.call()
:
Hinweis Verwenden Sie nichtstdout=PIPE
oderstderr=PIPE
mit dieser Funktion. Der untergeordnete Prozess wird blockiert, wenn er genügend Ausgabe für eine Pipe generiert, um den Pipe-Puffer des Betriebssystems zu füllen, da die Pipes nicht gelesen werden.
Python 2.7subprocess.call()
:
Hinweis Verwenden Sie nichtstdout=PIPE
oderstderr=PIPE
Mit dieser Funktion kann ein Deadlock basierend auf dem untergeordneten Prozessausgabevolumen auftreten. Verwenden Sie Popen mit der Methode communic (), wenn Sie Pipes benötigen.
Python 2.6 enthält keine derartigen Warnungen.
Auch diesubprocess.call()
undsubprocess.check_call()
scheint keine Möglichkeit zu haben, auf ihre Ausgabe zuzugreifen, außer wenn stdout = PIPE mit communic () verwendet wird:
https: //docs.python.org/2.6/library/subprocess.html#convenience-function
Beachten Sie, dass Sie Daten an das @ des Prozesses senden möchtestdin
, du musst das @ erstellPopen
Objekt mitstdin=PIPE
. In ähnlicher Weise müssen Sie @ angeben, um im Ergebnistupel etwas anderes als None zu erhaltestdout=PIPE
und / oderstderr=PIPE
auch
https: //docs.python.org/2.6/library/subprocess.html#subprocess.Popen.communicat
Welcher Unterschied zwischensubprocess.call()
undsubprocess.Popen()
machtPIPE
weniger sicher fürsubprocess.call()
?
Spezifischer Warum tutsubprocess.call()
"Deadlock basierend auf dem Ausgabe-Volume des untergeordneten Prozesses.", und nichtPopen()
?