Я пытаюсь асинхронно запустить другой скрипт 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.