gevent.subprocess.Popen从另一个python文件获取输出

时间:2019-06-03 19:39:42

标签: python asynchronous gevent

我正在尝试异步运行另一个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())

我找到了答案here,但这涉及将功能作为子进程运行,而我想运行python文件。

0 个答案:

没有答案