Какая разница между 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()?

Ответы на вопрос(0)

Ваш ответ на вопрос