微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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',shell=True) time.sleep(60)

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

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

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

dynamic更新Apacheconfiguration“允许从IP”没有重新启动/重新加载?

防止Windows 10以编程方式更新后自动重新启动

比较冷启动和热启动

如何检测JVM是否升级而不重启(在Windows上)?

如何重新启动Ubuntu Linux上运行的远程MysqL服务器?

Linux的重启()系统调用:为什么在kernel_halt()之后调用do_exit(0)?

NodeJS永远不能在启动时运行

Nginx – 我可以添加一个新的虚拟主机,而无需重新启动服务器?

如何在几秒钟内安排定时重启我的服务器?

你如何重新启动Apache(网页)button点击?

你的问题有两个部分:

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

如何自动重启脚本

如何重新启动

优先顺序:

修复my_test.py ,以避免由于已知问题而导致崩溃

使用一个主管程序来运行你的脚本,比如upstart或者supervisord – 如果它崩溃,它们可以自动重启

用你自己的错误编写自己的主管程序

如果你能找到一个已经在Windows上运行的supervisor程序( upstart和supervisord不能在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()))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐