Asyncio: как общаться с процессом?Python

Программы на Python
Anonymous
Asyncio: как общаться с процессом?

Сообщение Anonymous »

Я столкнулся с довольно простой проблемой — я не могу связаться со стандартным выводом процесса.
Процесс представляет собой простой секундомер, поэтому я могу запустить его, остановить и узнать текущее время.< /p>
Код секундомера:

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

import argparse
import time

def main() -> None:
parser = argparse.ArgumentParser()
parser.add_argument('start', type=int, default=0)

start = parser.parse_args().start

while True:
print(start)
start += 1
time.sleep(1)

if __name__ == "__main__":
main()
И его менеджер:

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

import time
import asyncio

class RobotManager:
def __init__(self):
self.cmd = ["python", "stopwatch.py", "10"]
self.robot = None

async def start(self):
self.robot = await asyncio.create_subprocess_exec(
*self.cmd,
stdout=asyncio.subprocess.PIPE,
)

async def stop(self):
if self.robot:
self.robot.terminate()
await self.robot.wait()

async def state(self):
print("communicating...")
stdout, stderr = await self.robot.communicate()
print(stdout, stderr)

async def main():
robot = RobotManager()
await robot.start()
time.sleep(5)
await robot.state()
time.sleep(5)
await robot.stop()

asyncio.run(main())
После запуска python Manager.py он зависает при получении состояния робота.
Я пытался заменить proc.communicate() на proc.stdout.readline(), но ничего не изменилось.

Подробнее здесь: https://stackoverflow.com/questions/782 ... th-process

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