Python 3.9如何正确调用steam://网页协议启动Steam游戏?
问题根因
原代码失效的核心问题是强制指定Chrome作为steam://协议的处理载体:Chrome本身不直接响应自定义URI协议,触发多用户选择界面后不会将协议请求透传给系统绑定的默认处理程序,进程卡在账户选择步骤直接中断,既不会启动游戏也不会抛出运行时错误。硬编码浏览器路径的写法本身兼容性极差,浏览器版本更新、多用户配置、安装路径变化都会导致调用失败。
可直接运行的实现方案
Windows环境最稳妥方案(推荐)
直接调用Windows原生的文件/协议启动接口,完全绕过浏览器,直接读取注册表中steam://协议绑定的Steam客户端路径执行启动,没有额外依赖:
import os def launch_steam_game(game_id: int): os.startfile(f"steam://rungameid/{game_id}") # 测试启动ID为440的《军团要塞2》 launch_steam_game(440)
只要本地手动输入steam://rungameid/440到资源管理器地址栏能正常启动游戏,这段代码就可以100%运行,不会触发任何浏览器弹窗。
跨平台兼容方案
如果需要同时支持Windows/macOS/Linux,不要给webbrowser模块指定硬编码的浏览器路径,直接调用默认的open方法,让系统自动匹配对应协议的处理程序:
import webbrowser webbrowser.open("steam://rungameid/440")
权限受限场景备选方案
如果运行环境存在权限限制,前两种方案无法正常触发,可以通过subprocess直接调用各系统原生的URL启动命令:
import sys import subprocess def open_custom_protocol(uri: str): if sys.platform.startswith("win"): # Windows下空字符串参数是为了规避start命令对带空格路径的解析bug subprocess.run(["cmd", "/c", "start", "", uri], shell=True) elif sys.platform.startswith("darwin"): subprocess.run(["open", uri]) else: subprocess.run(["xdg-open", uri]) open_custom_protocol("steam://rungameid/440")
注意事项
- 所有方案生效的前提是本地已正常安装Steam客户端,且
steam://协议已正确关联到Steam程序(官方安装包默认会自动配置该关联,绿色版Steam需要手动添加注册表绑定) - 远程启动场景只需在安装Steam的本地设备上触发上述代码执行即可,协议本身为本地调用,不需要额外做端口映射或网络穿透。
内容的提问来源于stack exchange,提问作者Pootis
相关产品推荐
相关产品推荐

