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