我目前有一个python脚本,它正是我需要它做的事情,但是不时的脚本会挂起,重启它的唯一方法就是杀死脚本并重新启动它。
我想知道是否有办法放入一些会重新启动它的命令,让我们说它每次挂起或出现特定消息时,甚至只是在计时器上重新启动它,例如:每隔50秒。
我无法通过此处提供代码,但如果我们私下谈话,我可以提供。
如果您的修复有效,我愿意付给您一些钱。
请发送电子邮件至stackoverflow1@shaw.ca
谢谢!
编辑:我明白了 - 那么 - 是否有可能向我提供一些代码,它会在特定的计时器上重启?
Edit2:好的感谢大家的评论 - 我会与构建它的人联系,看看他们是否可以从头开始重写它以包含计时器。
干杯。
答案 0 :(得分:0)
如果你愿意,可以随时付钱给我,虽然这绝不是必要的。
下面:
import time
import threading
import os
def restart():
time.sleep(50)
os.execv('/full/path/to/this/script', ['second argument', 'third argument'])
def main():
t = threading.Thread(target=restart, args=(), name='reset')
t.start()
# ... The rest of your code.
如果您打开了任何您关心的缓冲区(例如stdout),那么您需要在调用execv之前立即刷新它们。
我还没有测试过这段代码,因为我现在还没有方便的python解释器,但如果它不起作用我会感到惊讶。对execv的调用将替换当前上下文,因此您不会获得越来越深层次的子进程层次结构。所有我正在做的,如果你很好奇并且想知道谷歌的神奇短语,那就是设置一个“定时器中断处理程序”。对于学生来说,不,我认识到这件事并没有直接处理任何中断。
sleep的数字参数以秒为单位。我只是要求你不要在恶意软件中使用我的代码,除非是出于研究目的。我特别喜欢这样。
编辑:此外,其中很多内容来自here。