【问题标题】:Restart python script重启python脚本
【发布时间】:2015-06-27 13:25:01
【问题描述】:

我有一个从流 API 收集数据的脚本。我随机收到一个错误,无论出于何种原因,我相信它来自 twitter 的末尾。它不会在特定时间发生,我早在运行我的脚本后 10 分钟就可以看到它,其他时间在 2 小时后就可以看到它。

我的问题是如何创建另一个脚本(在运行的脚本之外),如果它因错误而终止,则可以捕获它,然后在延迟后重新启动。

我做了一些搜索,大部分都与在 linux 上使用 bash 有关,我在 windows 上。其他建议是使用 Windows 任务计划程序,但只能设置为已知时间。

我遇到了以下代码:

import os, sys, time

def main():  
    print "AutoRes is starting"
    executable = sys.executable
    args = sys.argv[:]
    args.insert(0, sys.executable)

    time.sleep(1)
    print "Respawning"
    os.execvp(executable, args)

if __name__ == "__main__":  
    main()

如果我没记错的话,里面的代码运行对吗?问题是我的脚本当前正在收集数据,我无法终止编辑。

【问题讨论】:

  • 您能否检测您的脚本何时出错?此时你可以抛出异常。
  • 我确实有一个异常,但它没有捕获该错误,一旦我从 API 接收到数据并为此工作,它就会捕获错误。这就是为什么我认为这可能是我和 twitter 之间的连接问题。
  • @Leb 但总的来说,你能知道你的脚本什么时候出错了吗?届时,请致电sys.exit(1)
  • @JuanPablo 我需要延迟,否则推特不会欣赏它。

标签: python


【解决方案1】:

这个怎么样?

from os import system
from time import sleep

while True: #manually terminate when you want to stop streaming
    system('python streamer.py')
    sleep(300) #sleep for 5 minutes

同时,当 streamer.py 出现问题时,通过调用 sys.exit(1) 从那里结束它

确保这个和streamer.py 在同一个目录中。

【讨论】:

  • @Leb 这是一个单独的“控制器”脚本。
  • 根据 streamer.py 的确切作用,您可能会得到多个 streamer.py 实例。此外,您可能需要等待 5 分钟才能处理错误的 streamer.py
  • @moose 这怎么可能?
  • @moose 不是对systemblocking 的调用吗?
  • @RishavKundu 我在另一个脚本上做了一个虚拟运行,它有效。我不能在我的主要连接上使用它,因为它会创建另一个连接。一旦当前的终止,我将运行它并更新。
猜你喜欢
  • 2023-03-13
  • 2016-07-17
  • 2020-09-13
  • 2013-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 2010-12-17
相关资源
最近更新 更多