【问题标题】:Python script does not restart after it crashesPython脚本崩溃后不会重新启动
【发布时间】:2016-12-20 15:13:03
【问题描述】:

我有一个 python 脚本正在做一些叫做“python1.py”的东西。有时因为连接问题,它会崩溃。我有另一个名为“loop.py”的脚本,它应该在它崩溃并重新启动时监控第一个脚本。到目前为止,它无法重新启动。意思是,当出现异常(IOError 或 WatsonException(我正在使用 Watson API))时,脚本会停止

python1.py 是这样的:

def mainfunction ():
    a = randrange(0, 1)
    Print (' my routine is doing something')
    if a = 1 :
        Print ('a = 1 ')
    else :
        Print (' a is not equals to 1') 

mainfunction ()

应该重新启动第一个脚本的另一个脚本是这样的:

def loopApp():
    while True :
        try:
            python1.mainfunction ()
        except IOError :
            print (' IOError y')
        except WatsonException :
            print (' Exception from watson API')

loopApp ()

python1.py 应该在每次异常发生时重新启动,但事实并非如此。

【问题讨论】:

  • 您的脚本存在一些问题: (1) 在python1.py 中,该函数已在导入时调用,而没有保护try / except。除了IOErrorWatsonException 之外,也没有任何其他异常处理。
  • 将它们视为两个独立的脚本可能会造成混淆。一个脚本没有重新启动另一个脚本。从脚本一到脚本二有一次导入。然后脚本二一遍又一遍地运行。
  • 您建议只放入一个脚本?那我应该怎么做呢?
  • 实际上,第二个脚本在第一个脚本崩溃后并没有重新启动第一个脚本,这是我的问题。我希望第一个在崩溃时自动重新启动。

标签: python exception crash ioerror


【解决方案1】:

我找到了使用 python subprocess 的方法。它工作正常,我可以预期工作。

def loopApp():
   
    loop = 1
    while loop == 1:
        print ("wa_loop is starting")
        try:
            process = subprocess.call(['python', 'wa_dir_watch.py'])
        except 'IOError':
            print ("\nretrying after IOError")
            continue         
        except KeyboardInterrupt:
            print ("\nstopped by user Ctr+C")
            quit() 
            
loopApp()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多