Я пытаюсь создать рабочий подпроцесс, который работает параллельно с моим основным приложением.Для этого я использую subprocess.Popen и встроенные PIPE.
p = subprocess.Popen( cmd , stdin=subprocess.PIPE, stdout=subprocess.PIPE, bufsize=1, universal_newlines=True)
time.sleep(.5)
data = p.stdout.readline()
for i in range(10): # repeat several times to show that it works
p.stdin.write("test")
line = p.stdout.readline()
print(line) # read output
Я могу получать данные на стандартный вывод PIPE в переменную data , ноОператор read в цикле всегда возвращает пустую строку.
Мой подпроцесс чрезвычайно прост:
print("Its working", flush=True)
while(True):
r=input()
print("Its working", flush=True)
Может показаться, что мой подпроцесс не может прочитать данные, отправленные через stdin.Если я удалил команду r = input () и только постоянно печатал строку, она работает, и я получаю строку несколько раз, но в тот момент, когда я пытаюсь проверить входящую строку через input (), она никогда не получает ее.
Пытаюсь ли я неправильно захватить данные на входящей ТРУБЕ, и если да, то как мне это сделать?Я пробовал другие варианты, такие как:
r = sys.stdin.buffer.read()
r = sys.stdin.buffer.readline()
r = sys.stdin.read()
r = sys.stdin.readline()
, но ни один из них не работает.