Какая разница между subprocess.call () и subprocess.Popen () делает PIPE менее безопасным для первых?
Я посмотрел на документацию для них обоих.
Этот вопрос вызван комментарием J.F. здесь:Получение выходных данных subprocess.call ()
Текущая документация по Python дляsubprocess.call()
говорит следующее об использованииPIPE
заsubprocess.call()
:
Примечание Не используйтеstdout=PIPE
или жеstderr=PIPE
с этой функцией. Дочерний процесс будет блокироваться, если он генерирует достаточно вывода для канала, чтобы заполнить буфер канала ОС, поскольку каналы не читаются из.
Python 2.7subprocess.call()
:
Примечание Не используйтеstdout=PIPE
или жеstderr=PIPE
с этой функцией, которая может тупиковая, основываясь на томе вывода дочернего процесса. Используйте Popen с методом connect (), когда вам нужны каналы.
Python 2.6 не содержит таких предупреждений.
Так жеsubprocess.call()
а такжеsubprocess.check_call()
похоже, нет возможности получить доступ к их выводу, за исключением использования stdout = PIPE с connect ():
https://docs.python.org/2.6/library/subprocess.html#convenience-functions
Обратите внимание, что если вы хотите отправить данные в процессstdin
нужно создатьPopen
объект сstdin=PIPE
, Точно так же, чтобы получить что-либо кроме None в кортеже результата, вам нужно датьstdout=PIPE
и / илиstderr=PIPE
тоже.
https://docs.python.org/2.6/library/subprocess.html#subprocess.Popen.communicate
Какая разница междуsubprocess.call()
а такжеsubprocess.Popen()
маркиPIPE
менее безопасно дляsubprocess.call()
?
Более конкретно: Почемуsubprocess.call()
msgstr "тупик, основанный на томе вывода дочернего процесса.", и неPopen()
?