Я пытаюсь открыть процесс 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