Python подпроцесс с каналами блокируется при чтении стандартного вывода - PullRequest
1 голос
/ 20 апреля 2020

Я пытаюсь открыть процесс cmd.exe, написать в stdin и затем прочитать вывод формы stdout.

Я создал 2 канала для ввода и вывода:

read_in, write_in = os.pipe()
read_out, write_out = os.pipe()

Затем я открываю процесс cmd.exe:

proc = SB.Popen("cmd.exe", shell=False, stdin=read_in, stdout=write_out, stderr=write_out)

Затем я читаю заголовки из cmd.exe:

>>> os.read(read_out, 200)
b'Microsoft Windows [Version 10.0.18363.778]\r\n(c) 2019 Microsoft Corporation. All rights reserved.\r\n\r\nC:\\blabla>'

Затем я записываю комманд для ввода:

os.write(write_in, b"ipconfig")

Но когда я читаю из stdout, ничего не происходит, а просто блокируется:

os.read(read_out, 200)

Вот общий код:

>>> import os
>>> import subprocess as SB
>>> read_in, write_in = os.pipe()
>>> read_out, write_out = os.pipe()
>>> proc = SB.Popen("cmd.exe", shell=False, stdin=read_in, stdout=write_out, stderr=write_out)
>>> os.read(read_out, 200)
b'Microsoft Windows [Version 10.0.18363.778]\r\n(c) 2019 Microsoft Corporation. All rights reserved.\r\n\r\nC:>'
>>> os.write(write_in, b"ipconfig")
8
>>> os.read(read_out, 200)

Мне известно о subprocess.PIPE и process.communicate(), но я использую другой набор файловых дескрипторов / pipe

...