У меня два файла py, первый, a.py
:
import asyncio
async def async_readline(proc: asyncio.subprocess.Process):
while proc.returncode is None and not proc.stdout.at_eof():
out = await proc.stdout.readline()
print(F"OUT:{out}")
async def main():
proc = await asyncio.create_subprocess_exec(
*["python3", "b.py"],
stdout=asyncio.subprocess.PIPE,
stdin=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
)
tasks = [
asyncio.create_task(async_readline(proc)),
]
done, pending = await asyncio.wait(
tasks,
timeout=4,
return_when=asyncio.FIRST_COMPLETED
)
[i.cancel() for i in pending]
print(f"done: {[i.result() for i in done]}")
if proc.returncode is None:
proc.kill()
print(await proc.communicate())
print(proc.returncode)
if __name__ == "__main__":
asyncio.run(main())
, это основной файл. и другой файл b.py
:
import time
print("start1")
print("start1")
print("start1")
time.sleep(1)
print("start1")
time.sleep(1)
print("start1")
time.sleep(1)
print("start1")
time.sleep(1)
print("start2")
print("start1")
time.sleep(1)
print("start2")
time.sleep(1)
print("start2")
print("start2")
time.sleep(1)
print("end")
Я запускаю a.py
напрямую с pycharm, получил выходные данные:
OUT:b'start1\n'
OUT:b'start1\n'
OUT:b'start1\n'
OUT:b'start1\n'
OUT:b'start1\n'
OUT:b'start1\n'
done: []
(b'start2\nstart1\nstart2\nstart2\nstart2\nend\n', b'')
0
Затем я использовал ту же команду, что и pycharm в терминале , Я получаю такие результаты:
done: []
(b'start1\nstart1\nstart1\nstart1\nstart1\nstart1\nstart2\nstart1\nstart2\nstart2\nstart2\nend\n', b'')
0
Почему результаты разные?
Интерпретатор , тот же python и тот же код , но у них разные выходы. Я полагаю, что в run env есть что-то другое, но я не могу его найти и исправить.
Кстати, я думаю, что результаты pycharm-а соответствуют логике моего кода c.
Как получить те же выходы на терминале?
Заранее спасибо!