You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Inputs模块获取按键输入时触发多进程RuntimeError问题求助

解决inputs模块触发的RuntimeError与AttributeError问题

我来帮你分析下这个问题,核心原因是代码结构不符合Python多进程的规范,加上调用inputs.get_key()的位置不对,才导致了这些连锁错误。

问题根源

当你直接运行Python脚本时,整个模块会被完整加载执行。inputs模块内部依赖多进程来监听输入设备,当它启动子进程时,子进程会重新加载你的脚本。如果像你那样把events = inputs.get_key()放在if __name__ == '__main__':外面,子进程就会再次执行这段代码,进而触发多进程启动的冲突(也就是那个RuntimeError)。而Python Shell是交互式环境,不会重复加载模块,所以不会出现这个问题。

另外你看到的AttributeError: 'NoneType' object has no attribute 'terminate'是RuntimeError引发的后续错误——因为主进程初始化失败,输入设备的子进程没有正确创建,最后在销毁对象时调用terminate()自然就会报错。

修正方案

你需要把所有实际执行的代码(包括调用inputs.get_key())都放到if __name__ == '__main__':代码块里,并且确保freeze_support()在任何多进程相关操作之前调用。修正后的代码如下:

import inputs
from multiprocessing import freeze_support  # 别忘了导入freeze_support

if __name__ == '__main__':
    freeze_support()  # 先调用这个,再执行其他操作
    events = inputs.get_key()  # 把获取按键的代码移到这里
    # 这里可以添加处理按键事件的逻辑
    print(events)

额外说明

  • freeze_support()主要是为脚本打包成可执行文件(比如用PyInstaller)时准备的,如果不需要打包,其实可以省略这一行,但加上也不会有问题。
  • 把代码放到if __name__ == '__main__':块里是Python多进程编程的标准规范,能从根源上避免子进程重复执行模块级别的代码,解决这类启动冲突问题。

内容的提问来源于stack exchange,提问作者Dextron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:08:02