【发布时间】:2019-10-21 20:12:20
【问题描述】:
我正在尝试使用asyncio 编写一个同时接受键盘输入的Python 程序。当我尝试关闭我的程序时出现问题。由于键盘输入最终使用sys.stdin.readline 完成,因此该函数仅在我按下ENTER 后返回,无论我是stop() 事件循环还是cancel() 函数的Future。
有没有什么方法可以取消asyncio的键盘输入?
这是我的 MWE。它将接受键盘输入 1 秒,然后stop():
import asyncio
import sys
async def console_input_loop():
while True:
inp = await loop.run_in_executor(None, sys.stdin.readline)
print(f"[{inp.strip()}]")
async def sleeper():
await asyncio.sleep(1)
print("stop")
loop.stop()
loop = asyncio.get_event_loop()
loop.create_task(console_input_loop())
loop.create_task(sleeper())
loop.run_forever()
【问题讨论】:
-
你必须避免 readline,因为它完全按照你说的做,即等待输入,并且你希望你的键盘输入不等待输入。你还试过什么。
-
@barny:选项不多。我试过
input()和msvcrt.getwch()。效果一样。
标签: python python-asyncio