Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何";暂停“;直到asyncio关闭之前的脚本_Python_Python 3.x_Python Asyncio - Fatal编程技术网

Python 如何";暂停“;直到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

我有一个调用类的函数,在初始化类之后,它将继续执行函数,这是它应该做的。但是,我想在初始化类之后暂停,直到从类内部关闭asyncio

大概是这样的:

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?”这是我无法回答的问题,除非向您指出示例代码。