Я посмотрел документацию для них обоих.
Этот вопрос вызван комментарием 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()?
