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