防止脚本被sys.exit()

时间:2017-06-12 12:03:26

标签: python python-2.7

我需要每5分钟调用一个脚本(test.py),所以我使用了另一个脚本timer.py和以下代码:

import time
while(1==1):
    execfile("test.py")
    time.sleep(300)

这可以正常工作。 但经过几次迭代后它停止了工作。调试后,我发现test.py中有一个流程,它使用以下代码:

sys.exit()

因此,这会导致test.py和timer.py停止。 应该做什么更改,以便继续timer.py,因为我希望sys.exit()只退出test.py而不是timer.py

4 个答案:

答案 0 :(得分:7)

sys.exit()除了提升SystemExit(一个BaseException子类)之外没有做更多的事情,这可以像任何例外一样被捕获,例如:

import time
while True:
    try:
        execfile("test.py")
    except SystemExit:
        print("ignoring SystemExit")
    finally:
        time.sleep(300)

答案 1 :(得分:0)

试试这个:

import time
import os
while True:
    os.system("python test.py") # if you are not running script from same directory then mention complete path to the file
    time.sleep(300)

答案 2 :(得分:0)

你应该可以使用:

try:
  # Your call here
except BaseException as ex:
  print("This should be a possible sys.exit()")

查看the documentation了解详情。

答案 3 :(得分:0)

使用subprocess

import subprocess  
import time

while(1==1):
    subprocess.call(['python', './test.py'])
    time.sleep(300)

如果test.py文件在第一行有一个shebang评论,你甚至可以删除 python 一词:

#!/usr/bin/env python

这不完全相同,因为它将启动一个新的解释器,但结果将是类似的。