Я посмотрел документацию для них обоих.
Этот вопрос вызван комментарием J.F. здесь: Получение вывода subprocess.call()
В текущей документации Python для subprocess.call()
говорится следующее об использовании PIPE
для subprocess.call()
:
Примечание. Не используйте
stdout=PIPE
илиstderr=PIPE
с помощью этой функции. Детский процесс будет блокироваться, если он генерирует достаточный вывод в канал для заполнения буфера для буфера OS, поскольку каналы не читаются.
Python 2.7 subprocess.call()
:
Примечание. Не используйте
stdout=PIPE
илиstderr=PIPE
с этой функцией, так как это может быть блокировка на основе выходного тома дочернего процесса. Используйте Popen с методом communication(), когда вам нужны трубы.
Python 2.6 не содержит таких предупреждений.
Кроме того, subprocess.call()
и subprocess.check_call()
, похоже, не имеют доступа к их выходным данным, за исключением использования stdout = PIPE с сообщением():
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()
на основе выходного тома дочернего процесса. ", а не Popen()
?