猿问

如何避免 Python 挂在 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 图标错误并消失。


德玛西亚99
浏览 158回答 1
1回答

qq_花开花谢_0

尝试替换subprocess.run() 为variable = subprocess.Popen([r'PathToGame.exe']) https://docs.python.org/3/library/subprocess.html表示 subprocess.run() 等待命令完成,然后返回 CompletedProcess 实例。你的命令没有完成。此外,您可以将超时参数传递给 run() 但默认情况下,它是None,并且不会超时,如果您仍想使用.run()
随时随地看视频慕课网APP

相关分类

Python
我要回答