Из документации Popen.wait()
, я вижуSubprocess висячие на Wait
Предупреждение Это тупиковая при использовании стандартный вывод = PIPE и/или STDERR = PIPE и дочерний процесс генерирует достаточно вывод трубы таким образом, что Блоки, ожидающие буфер буфера OS, чтобы принимать больше данных. Используйте для связи(), чтобы избежать этого.
У меня возникли проблемы с пониманием нижеприведенного поведения, поскольку нижеследующий пробег может генерировать довольно большой объем стандартного выхода.
Однако то, что я замечаю, что
subproc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
будет висеть.
Хотя
subproc = subprocess.Popen(command, stdout=subprocess.PIPE)
не будет висеть.
Если command
генерирует большое количество стандартного выхода, почему второй оператор не висит, поскольку мы все еще используем stdout=subprocess.PIPE
?