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