2016-07-27 81 views
0

我有一个Python模块,它接受2个参数(输入配置文件和输出文件)。我在模块的最后以标准方式调用main函数。Python 2.7 - 调用主递归

# Call to main function 

if __name__ == '__main__': 
    main() 

论逻辑在主功能的末端的一定的时间条件(处理时间<当前时间 - 20分钟),我有需要重新处理的主要功能,直到处理时间为20分钟之内当前时间。

鉴于传递给模块的参数,我必须做什么特别的或 是一样简单,因为我有这个if语句在主

if (time delta condition): 
    main() 
else: 
    sys.exit() 

我假设模块结束上面的主要调用仍然需要在那里从Cron调用模块。

请指教。无论什么时候调用,我都需要主要处理argv[1][2]

问候 希瓦

+0

我相信答案是“是的”。这与你的建议一样简单。你试过了吗? – smarx

+0

它的工作。谢谢smarx – Siva

回答

0

通常递归不是流控制的一个伟大的方法。首先,您可能需要注意如果递归调用return s会发生什么情况(尽管您似乎通过在非递归情况下调用sys.exit()来解决此问题)。

改为使用while循环可能更有意义。例如:

def main(): 
    while some_condition(): 
     do_stuff() 

很明显,您将需要用您实际的问题细节替换函数调用。

如果条件在开始时可能不是真的,但至少要一次运行循环体,那么在循环体的末尾进行实际的条件检查可能是有意义的,并保存结果在一个变量:

def main(): 
    keep_running = True 
    while keep_running: 
     do_stuff() 
     keep_running = some_condition() 

您还可以使用while Truebreak圈外如果条件表明它在某些时候是合适的(这可能是在循环体的中间):

def main(): 
    while True: 
     do_stuff() 
     if exit_condition(): 
      break 
     do_other_stuff() 
+0

伟大的方式来更有效地做到这一点。感谢Blcknght花时间解释这一点。 – Siva