如何编写Python脚本实现未运行电子游戏时自动打开指定应用
Python脚本实现思路
1. 核心逻辑拆解
整个功能只需要按周期执行3个操作即可:获取当前系统运行的所有进程 → 判断是否有游戏进程处于运行状态 → 无游戏运行时启动指定应用(避免重复启动)
2. 各环节实现方案
- 获取系统进程:优先用跨平台第三方库
psutil的psutil.process_iter()方法遍历所有进程,无需单独适配Windows/macOS/Linux的系统命令,兼容性更好。 - 游戏进程判定:提前整理你常玩的所有游戏的进程名,存入一个列表做匹配规则。如果不知道游戏对应的进程名,可以启动游戏后运行脚本打印所有进程名,逐个对应查找即可。
- 启动指定应用:确认指定应用未启动的前提下,调用对应系统的启动接口:
- Windows:用
os.startfile(应用绝对路径)或者subprocess.Popen([应用绝对路径]) - macOS:用
subprocess.Popen(["open", 应用绝对路径]) - Linux:用
subprocess.Popen(["xdg-open", 应用绝对路径])
- Windows:用
- 周期检测:用
time.sleep()设置检测间隔,推荐设置为300秒(5分钟)即可,不会占用过多系统资源。如果需要开机自启,Windows可以把脚本打包为exe后加入开机启动文件夹,macOS/Linux可以配置为后台服务。
3. 参考示例代码
import psutil import subprocess import time # 自定义配置项,替换为你自己的参数 GAME_PROCESSES = {"cs2.exe", "YuanShen.exe", "Stardew Valley.exe"} # 你的游戏进程名集合 TARGET_APP = r"C:\Program Files\MyApp\myapp.exe" # 要启动的应用的绝对路径 CHECK_GAP = 300 # 检测间隔,单位:秒 def has_running_game(): """判断是否有游戏正在运行""" for proc in psutil.process_iter(["name"]): try: if proc.info["name"] in GAME_PROCESSES: return True except (psutil.NoSuchProcess, psutil.AccessDenied): # 跳过无权限访问或者已经结束的进程 continue return False def is_target_running(): """判断目标应用是否已经启动""" app_proc_name = TARGET_APP.split("\\")[-1] for proc in psutil.process_iter(["name"]): try: if proc.info["name"] == app_proc_name: return True except (psutil.NoSuchProcess, psutil.AccessDenied): continue return False if __name__ == "__main__": while True: if not has_running_game() and not is_target_running(): subprocess.Popen(TARGET_APP) time.sleep(CHECK_GAP)
注:Windows下路径前加r可以避免转义字符导致的路径识别错误,使用脚本前需要先执行pip install psutil安装依赖库
内容的提问来源于stack exchange,提问作者Wassim Maestro
相关产品推荐
相关产品推荐

