子进程无法成功重新启动目标 python 文件
subprocess can't successfully restart the targeted python file
我编写了一个程序 my_test.py
从 Web 获取数据并存储到 mysql。
但是程序my_test.py
崩溃了很多(我的编程技术不好...)我试着监控它的状态并在崩溃时重新启动它。
我使用带有以下代码的子流程模块。
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
崩溃时,跳出一个windows警告window提醒我my_test.py
挂了,我会选择哪个动作:停止,调试。 ..
像那样的东西。
my_test.py
似乎被警报 windows 冻结了,上面的代码无法成功重启它。
只有当我通过选择 'close' 手动关闭 window 时,它才会重新启动。
是否有解决此问题的方法,使我的代码在出现故障时可以成功重启my_test.py
?
对于我糟糕的英语给您带来的不便,我们深表歉意,在此先感谢您的宝贵建议。
你的问题分为两部分:
如何处理调试对话框。你可以试试这个:How do I disable the 'Debug / Close Application' dialog on Windows Vista?
如何自动重启脚本
如何重启
优先顺序:
- 修复
my_test.py
,以避免因已知问题导致崩溃
- 使用监督程序 运行 您的脚本,例如
upstart
或 supervisord
-- 如果它崩溃,他们可以自动重启它
- 编写你自己的主管程序,你必须维护它自己的错误
如果您能找到适用于 Windows(upstart
和 supervisord
不要在 Windows) 上工作。
您当前的主管脚本可以改进,以避免在程序崩溃后等待一分钟再重新启动,如果它已经 运行 已经超过一分钟:
#!/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()))
我编写了一个程序 my_test.py
从 Web 获取数据并存储到 mysql。
但是程序my_test.py
崩溃了很多(我的编程技术不好...)我试着监控它的状态并在崩溃时重新启动它。
我使用带有以下代码的子流程模块。
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
崩溃时,跳出一个windows警告window提醒我my_test.py
挂了,我会选择哪个动作:停止,调试。 ..
像那样的东西。
my_test.py
似乎被警报 windows 冻结了,上面的代码无法成功重启它。
只有当我通过选择 'close' 手动关闭 window 时,它才会重新启动。
是否有解决此问题的方法,使我的代码在出现故障时可以成功重启my_test.py
?
对于我糟糕的英语给您带来的不便,我们深表歉意,在此先感谢您的宝贵建议。
你的问题分为两部分:
如何处理调试对话框。你可以试试这个:How do I disable the 'Debug / Close Application' dialog on Windows Vista?
如何自动重启脚本
如何重启
优先顺序:
- 修复
my_test.py
,以避免因已知问题导致崩溃 - 使用监督程序 运行 您的脚本,例如
upstart
或supervisord
-- 如果它崩溃,他们可以自动重启它 - 编写你自己的主管程序,你必须维护它自己的错误
如果您能找到适用于 Windows(upstart
和 supervisord
不要在 Windows) 上工作。
您当前的主管脚本可以改进,以避免在程序崩溃后等待一分钟再重新启动,如果它已经 运行 已经超过一分钟:
#!/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()))