在单独线程的终端上监听Python Keypress

时间:2018-06-22 08:46:51

标签: python linux keyboard

我正在为终端制作一个简单的游戏(因为我不想在Arch计算机上安装gui)。我想检测按键并相应地更改变量,以便当主流程再次循环时,它可以看到更改后的变量。我已经在Google上搜索了一个小时,试图找出答案,然后一切都停止了程序等待Keypress或需要xserver显示器(pynput)。我如何在后台检测到按键?我真的不想为此安装大型'ol库,例如pygame ...

1 个答案:

答案 0 :(得分:0)

您要查找的内容称为event loop。这个循环不断地运行您的程序,同时允许回调直接在程序内部流动。在Python3中,标准库中有一个专门针对此的新模块,称为asyncio

  

事件循环是asyncio提供的中央执行设备。它提供了多种功能,包括:

     

注册,执行和取消延迟的呼叫(超时)。   创建用于各种通信的客户端和服务器传输。   启动子流程和相关的传输,以便与外部程序进行通信。   将昂贵的函数调用委派给线程池。   https://docs.python.org/3/library/asyncio-eventloop.html

可以同步编写Python程序(阅读:使用线程),但是通常无法满足您的需要,并且会增加您不应该关心的复杂性。在大多数情况下,通过回调的异步流不太复杂,可以防止您遇到死锁,竞争条件或其他与线程相关的问题。