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()?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage