Модуль подпроцесса имеет удобную функцию call, которая реализована как в 2.6, так и 3.1:
def call(*popenargs, **kwargs):
return Popen(*popenargs, **kwargs).wait()
Документация для этой функции содержит красное предупреждение, считая:
Предупреждение. Подобно
Popen.wait(), это будет заторможен при использованииstdout=PIPEи/илиstderr=PIPE, а дочерний процесс генерирует достаточный вывод в канал таким образом, чтобы он блокировал ожидание протокола OS буфер, чтобы принимать больше данных.
В документации Popen.wait() говорится, что вместо этого использовать Popen.communicate() в таких обстоятельствах. Ну, тогда почему вместо call просто реализовано, как показано ниже, так что глупое предупреждение можно удалить, а глупые ограничения, подобные этому, удалены из стандартной библиотеки?
def call(*args, **kwargs):
input = kwargs.pop("input", None)
p = Popen(*args, **kwargs)
p.communicate(input)
return p.returncode
Я уверен, что есть причина. Что мне не хватает?