Как мне управлять подпроцессом Python с бесконечным циклом ⇐ Python

Программы на Python
Anonymous
Как мне управлять подпроцессом Python с бесконечным циклом

Сообщение Anonymous »

Я хочу прочитать входные данные из подпроцесса в Python, взаимодействовать с ним, увидеть результаты этого взаимодействия, а затем завершить процесс. У меня есть следующие родительские и дочерние процессы.

Код: Выделить всё

child.py

from random import randint

x = 1
while x < 9:
x = randint(0, 10)
print("weeeee got", x)

name = input("what's your name?\n")
print("hello", name)

x = 0
while True:
x += 1
print("bad", x)

Код: Выделить всё

parent.py

import curio
from curio import subprocess

async def main():
p = subprocess.Popen(
["./out"],
stdout=subprocess.PIPE,
stdin=subprocess.PIPE,
)

async for line in p.stdout:
line = line.decode("ascii")
print(p.pid, "got:", line, end="")
if "what" in line and "name" in line:
out, _ = await p.communicate(input=b"yaboi\n")
print(p.pid, "got:", out.decode("ascii"), end="")
# stuff to properly kill the process ...
return

if __name__ == "__main__:
curio.run(main)
Если я запущу это, родительский элемент зависнет:

Код: Выделить всё

            out, _ = await p.communicate(input=b"yaboi\n")
Проблему устраняет удаление следующего раздела из дочернего элемента:

Код: Выделить всё

x = 1
while x < 9:
x = randint(0, 10)
print("weeeee got", x)
Почему это не работает с бесконечным циклом? Как это исправить?

Подробнее здесь: https://stackoverflow.com/questions/790 ... inite-loop

Вернуться в «Python»