Взаимодействие через Popen с вводом и выводом
Пытаюсь перехватить ввод/вывод потока выполнения программы (на примере cmd.exe):
from subprocess import Popen, PIPE
import os
def main():
proc = Popen(["cmd"], stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=True)
while True:
a = (proc.stdout.readline())
if not a: break
else:
print a.deco
proc.stdin.write('ping 192.168.1.1')
a = (proc.stdout.readlines())
print a
if __name__ == '__main__':
main()
В принципе, у меня получается получить первые строки (кстати почему-то работает только через proc.stdout.readline):
Microsoft Windows [Version 10.0.15063]
но на строке
proc.stdin.write('ping 192.168.1.1')
Останавливается и ожидает. Пробовал в конце добавлить chr(13) - не помогает. Как правильно отправлять данные в поток?
UPDATE:
Получилось записать и прочитать так:
cmds = ['echo ok','ping 192.168.1.1\n']
p = Popen(["cmd"], stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=True)
for cmd in cmds:
p.stdin.write(cmd + "\n")
p.stdin.close()
print p.stdout.read().decode('cp866')
p.stdin.write('echo next task') # error on closed descriptor
Но после того, как p.stdin закрыт, открыть его обратно уже не могу. Делаю вывод, что python не поддерживает постоянное перенаправление ввода вывода с консолей другого приложения. К сожалению, это ставит крест на моей задаче