我怎样才能避免 Python 挂在 subprocess.run()

How can I avoid Python hanging on subprocess.run()

我正在创建一个小的自动化脚本来与游戏交互。游戏非常容易崩溃,但崩溃的方式不可预测(30 分钟到 3 小时后,具体取决于游戏中发生的情况)。因此,我在下面写了一个小脚本,理想情况下是要终止程序,终止检查崩溃并提供重启的崩溃监控客户端,然后重新启动游戏并继续。问题是我从来没有超过 subprocess.run()

它再次启动游戏,但之后不允许任何代码到 运行。

import psutil
import time
import subprocess

def 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 图标出错并消失。

尝试替换 subprocess.run() variable = subprocess.Popen([r'PathToGame.exe']) https://docs.python.org/3/library/subprocess.html 表示 subprocess.run() 等待命令完成,然后 returns 一个 CompletedProcess 实例。您的命令未完成。此外,您可以将超时参数传递给 运行(),但默认情况下,它是 None,并且不会超时,如果您仍想使用 .run()