如何避免Python挂起在subprocess.run()上

2024-07-04 05:52:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个与游戏交互的小型自动化脚本。游戏很容易崩溃,但以一种不可预测的方式(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的图标出错并消失


Tags: nameinimport游戏foriftimemain
1条回答
网友
1楼 · 发布于 2024-07-04 05:52:55

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

相关问题 更多 >

    热门问题