Модуль подпроцесса имеет удобную функцию 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
Я уверен, что есть причина. Что мне не хватает?