如何在sys.exit()命令后继续执行

时间:2013-05-21 05:30:30

标签: python

这里我正在使用'for'循环读取和比较来自两个日志的值。问题是我无法在sys.exit命令之后继续下一个TC。如果需要更多说明,请告诉我

f = open('/tmp/ftplog', 'r')
    for line in f:
        m = re.findall("5\d+", line)
        #print m
        fd = open('/tmp/tellog', 'r')
        for line in fd:
            n = re.findall(r"5\d+", line)
            #print n
            if  m == n:                 
             print "passed"

            sys.exit()  

####TC-02####

def tc02(ipadrr,login,password,ftpipaddr,ftplogin,ftppassword,ftpfilename):

    try:    

                telconn2 = pexpect.spawn(ipadrr)

4 个答案:

答案 0 :(得分:4)

您可以使用atexit添加将在退出时执行的挂钩。 http://docs.python.org/2/library/atexit.html?highlight=atexit#atexit

但是,需要在一个简单的脚本中执行此操作通常表明您的逻辑是错误的。你真的需要退出吗?你可以抛出异常吗? breakreturn?例如,尝试在函数中使用逻辑,在完成时使用函数return,以及调用它并使用返回结果执行某些操作的代码。

答案 1 :(得分:4)

sys.exit 实际上会引发SystemExit异常,你可以抓住它,但你真的不应该。重构您的程序,以便您不必。

答案 2 :(得分:2)

试试这个

print "passed"

return ####instead of sys.exit use return

答案 3 :(得分:1)

执行此操作的方法如果确实需要是在退出之前调用相同的脚本但在子流程中使用不同的参数:

import subprocess
p = subprocess.Popen("exec your_script.py -parameters parameter", stdout=subprocess.PIPE, shell=True)

然后,您可以为要提供的特定参数添加一些检查,并仅执行代码的这一部分(例如,您需要的tc02()功能)。

请记住,一旦您将脚本作为子进程调用,您就无法通过Ctr + C将其从控制台中停止,因为这会终止父进程,但不会终止子进程。为了杀死你需要调用这样一个方法的所有东西:

p.kill()