【发布时间】: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 图标错误并消失。
【问题讨论】:
-
stackoverflow.com/q/10965949/8014793
subprocess.run旨在等待进程完成。请改用subprocess.Popen
标签: python python-3.x subprocess freeze psutil