Python 如何";暂停“;直到asyncio关闭之前的脚本
我有一个调用类的函数,在初始化类之后,它将继续执行函数,这是它应该做的。但是,我想在初始化类之后暂停,直到从类内部关闭asyncio 大概是这样的:Python 如何";暂停“;直到asyncio关闭之前的脚本,python,python-3.x,python-asyncio,Python,Python 3.x,Python Asyncio,我有一个调用类的函数,在初始化类之后,它将继续执行函数,这是它应该做的。但是,我想在初始化类之后暂停,直到从类内部关闭asyncio 大概是这样的: from PyHook3 import HookManager import asyncio class Keystroke_Watcher(object): def __init__(self, event_loop): self.event_loop = event_loop self.hm = H
from PyHook3 import HookManager
import asyncio
class Keystroke_Watcher(object):
def __init__(self, event_loop):
self.event_loop = event_loop
self.hm = HookManager()
self.hm.KeyDown = self.on_keyboard_event
self.hm.HookKeyboard()
def on_keyboard_event(self, event):
if event.KeyID == 65: # A
self.shutdown()
return True
def shutdown(self):
self.hm.UnhookKeyboard()
self.event_loop.stop()
if __name__ == '__main__':
loop = asyncio.get_event_loop()
watcher = Keystroke_Watcher(loop)
loop.run_forever()
print("Done!")
我们的想法是,在按下“A”键之前,“主”代码不应继续。但是,使用此当前代码,它将冻结所有键盘操作,即使按下A键,它也不会停止
我是否使用了错误的异步IO循环
它在课堂上效果不是很好吗
这个问题的最佳解决方案是什么?(解决方案中不一定要包含asyncio)
注意:我知道Qt有一些东西可以做到这一点,但是我不想包括整个Qt库。QEventLoop().exec()启动它,QEventLoop().exit()结束它。我觉得
asyncio
在这里什么都不做。只是暂停一个python文件直到按下某个键是很简单的(没有PyHook),所以我觉得你实际上是在尝试做一些更复杂的事情,但是对这个问题做了一个没有抓住要点的抽象。它没有做任何事情的原因是因为它冻结了所有东西。现在在现实世界的应用程序中,注册一个按钮显然比注册一个按钮做得更多,但是这个概念仍然存在。例如,我希望应用程序冻结,直到用户按下A键,然后继续执行代码。假设每次用户按下一个按钮时,都会出现一行新的文本或其他内容,但是我在不使用asyncio或其他任何东西的情况下遇到的问题是,当类被初始化后,它将继续运行主循环。我将在此处删除所有asyncio内容。它没有做任何有用的事情。我怀疑PyHook3
甚至不支持asyncio,并且在等待击键时不会将控制传递给asyncio事件循环。事实上,看一下,PyHook3
似乎需要来自pythoncom
--pythoncom.PumpMessages()的事件循环。因此,最简单的解决方案是删除asyncio。这就把问题变成了“我如何使用PyHook3?”这是我无法回答的问题,除非向您指出示例代码。