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

使用pydualsense读取PS5控制器输入突发停止报错求助

PS5手柄pydualsense读取数秒后报错的排查与解决

问题根源分析

你的代码存在两个核心问题,直接导致线程异常和资源泄漏:

  1. 重复创建手柄实例且未释放:每次调用input_check()都会新建pydualsense实例并初始化,但函数触发按键后直接return,后续的dualsense.close()永远不会执行。多次调用后,系统中堆积大量未释放的手柄资源,引发线程冲突报错。
  2. 无限循环重复初始化:外层while True持续调用input_check(),不断创建新的手柄连接,超出设备的并发访问限制。

修复步骤

  1. 全局初始化手柄实例:将手柄的初始化和关闭逻辑移到循环外部,确保整个程序生命周期内只创建一个手柄连接。
  2. 确保资源正确释放:使用try/finally块捕获中断信号,保证程序退出时能关闭手柄设备。
  3. 添加按键触发延迟:避免单次按键被重复识别,提升输入稳定性。

修复后完整代码示例

from pydualsense import pydualsense
import time

def main():
    # 仅初始化一次PS5手柄
    dualsense = pydualsense()
    dualsense.init()
    
    try:
        while True:
            # 检测按键输入
            if dualsense.state.options:
                print('option')
                time.sleep(0.1)  # 防止重复触发
            elif dualsense.state.ps:
                print('ps')
                time.sleep(0.1)
            elif dualsense.state.triangle:
                print('triangle')
                time.sleep(0.1)
            elif dualsense.state.square:
                print('square')
                time.sleep(0.1)
            elif dualsense.state.cross:
                print('cross')
                time.sleep(0.1)
            elif dualsense.state.circle:
                print('circle')
                time.sleep(0.1)
    except KeyboardInterrupt:
        # 捕获Ctrl+C中断,确保程序优雅退出
        pass
    finally:
        # 无论程序如何结束,都关闭手柄设备
        dualsense.close()

if __name__ == "__main__":
    main()

额外排查点

  • 更新pydualsense版本:执行pip install --upgrade pydualsense,修复库本身可能存在的线程或设备兼容问题。
  • 检查手柄连接:优先使用有线连接,避免蓝牙不稳定导致的设备访问异常;关闭其他可能占用手柄的软件(如Steam控制器管理器、其他手柄测试工具)。
  • 获取完整报错信息:当前报错只显示了线程栈的顶部,完整的traceback会暴露具体错误类型(如设备权限不足、IO读写失败),有助于进一步定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:27:41