gevent.subprocess.Popen получить вывод из другого файла Python - PullRequest
1 голос
/ 03 июня 2019

Я пытаюсь асинхронно запустить другой скрипт python и получить его небуферизованный вывод командной строки, используя gevent.

У меня уже есть такой пример работы с asyncio, но мне нужно использовать gevent для совместимости.

main.py

import asyncio

async def get_output():
    p = await asyncio.create_subprocess_exec('python', 'sub.py', 'watch', 'ls', '-u',
        stdout=asyncio.subprocess.PIPE,
        stderr=asyncio.subprocess.STDOUT,
    )
    while True:
        line = await p.stdout.readline()
        if not line:
            break
        print(line.decode("utf-8").replace("\r\n", ""))
    await p.wait()


async def print_stuff():
    for i in range(100):
        print("." + str(i))
        await asyncio.sleep(1)


async def main():
    asyncio.create_task(print_stuff())
    await asyncio.sleep(10)
    await get_output()


if __name__ == "__main__":
    asyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy())
    asyncio.run(main())

sub.py

import time
import asyncio
import sys


async def main():
    for i in range(100):
        print(i)
        await asyncio.sleep(1)

if __name__ == "__main__":
    asyncio.run(main())

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

...