subprocess无法成功重启目标python文件

我写了一个程序my_test.py从网上获取数据并存储到MySQL。 但程序my_test.py崩溃了很多(我的糟糕的编程技巧…),我试图监视它的状态,并在崩溃时重新启动它。 我用下面的代码使用subprocess模块。

 import subprocess import time p = subprocess.Popen(['python.exe', r'D:\my_test.py'], shell=True) while True: try: stopped = p.poll() except: stopped = True if stopped: p = subprocess.Popen(['python.exe', r'D:\my_test.py'], shell=True) time.sleep(60) 

但是,当my_test.py崩溃,一个窗口警告窗口跳出来提醒我, my_test.py是closures的,我会select哪个动作:停止,debugging…类似的东西。 并且my_test.py似乎被警告窗口冻结,上面的代码无法成功重启。 只有当我手动closures窗口select“closures”,它会重新启动。

有没有解决这个问题,使我的代码可以成功地重新启动my_test.py当它坏了?

对不起,由于我的英文不好所带来的不便,请多多指教。

Solutions Collecting From Web of "subprocess无法成功重启目标python文件"

你的问题有两个部分:

  • 如何处理调试对话框。 您可以试试这个: 如何在Windows Vista上禁用“调试/关闭应用程序”对话框?

  • 如何自动重启脚本

如何重新启动

优先顺序:

  1. 修复my_test.py ,以避免由于已知问题而导致崩溃
  2. 使用一个主管程序来运行你的脚本,比如upstart或者supervisord – 如果它崩溃,它们可以自动重启
  3. 用你自己的错误编写自己的主管程序

如果你能找到一个已经在Windows上运行的supervisor程序( upstartsupervisord不能在Windows上运行),最好限制自己选择1和/或2。

您的当前主管脚本可以改进,以避免等待一分钟,然后重启程序,如果它已经运行了一分多钟,

 #!/usr/bin/env python3 import sys import subprocess import time try: from time import monotonic as timer except ImportError: from time import time as timer # time() can be set back while True: earliest_next_start = timer() + 60 subprocess.call([sys.executable, r'D:\my_test.py']) while timer() < earliest_next_start: time.sleep(max(0, earliest_next_start - timer()))