【问题标题】:How can I avoid Python hanging on subprocess.run()如何避免 Python 挂在 subprocess.run()
【发布时间】:2020-02-11 09:05:46
【问题描述】:

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

【问题讨论】:

标签: python python-3.x subprocess freeze psutil


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 2013-08-30
    相关资源
    最近更新 更多