繁体   English   中英

如何避免 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()等待命令完成,然后返回一个 CompletedProcess 实例。 你的命令没有完成。 此外,您可以将超时参数传递给 run() 但默认情况下,它是None ,并且不会超时,如果您仍想使用.run()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM