Почему subprocess.call в Python реализован таким образом?

Модуль 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

Я уверен, что есть причина. Что мне не хватает?

13
задан River 24 October 2017 в 03:30
поделиться