我正在创建一个小型自动化脚本来与游戏交互。游戏很容易崩溃,但以一种不可预知的方式(30 分钟到 3 小时后,取决于游戏中发生的情况)。正因为如此,我在下面写了一个小脚本,理想情况下会杀死程序,杀死检查崩溃并提供重启的崩溃监控客户端,然后重新启动游戏并恢复。问题是我从来没有达到过 subprocess.run()它再次启动游戏,但之后不允许任何代码运行。import psutilimport timeimport subprocessdef main(): '''Process kill function''' for proc in psutil.process_iter(): # check whether the process name matches # print(proc.name()) if any(procstr in proc.name() for procstr in\ ['GameName.exe']): print(f'Killing {proc.name()}') proc.kill() time.sleep(5) for proc in psutil.process_iter(): # check whether the process name matches # print(proc.name()) if any(procstr in proc.name() for procstr in\ ['GameCrashMonitor.exe']): print(f'Killing {proc.name()}') proc.kill() time.sleep(10) subprocess.run(r'PathToGame.exe') print(time.time())if __name__ == "__main__": main()该程序成功到达 subprocess.call,再次启动游戏,然后 python 挂起。我无法控制 ipython 上的 c 来阻止它。我使用 Spyder,它甚至使我的任务栏上的 spyder 图标错误并消失。
1 回答

qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
尝试替换subprocess.run()
为variable = subprocess.Popen([r'PathToGame.exe'])
https://docs.python.org/3/library/subprocess.html表示 subprocess.run() 等待命令完成,然后返回 CompletedProcess 实例。你的命令没有完成。此外,您可以将超时参数传递给 run() 但默认情况下,它是None
,并且不会超时,如果您仍想使用.run()
添加回答
举报
0/150
提交
取消