从停止位置重新运行python脚本

时间:2018-12-26 15:26:25

标签: python python-3.x

我正在准备一个python脚本,其中包含4个函数和一个调用它们的主要函数。 运行脚本后,所有功能都会一一执行,但是在第二个功能完全执行后,我手动终止了该脚本。

现在我想,当脚本重新运行时,它应该忽略前两个功能,并从第三个功能开始。

我有一个使用文件的想法,并在每个函数执行时添加一个条目,并在下一次从该文件中读取时,但是如果嵌套的话,将需要太多嵌套。

还有其他想法吗?

3 个答案:

答案 0 :(得分:3)

为什么要“嵌套”?如果应该按顺序运行这些函数,则可以将要完成的最后一个函数的编号写入文件,然后具有一系列非嵌套的if,例如类似此伪代码的

... # read n from file, or 0 if it doesn't exist
if n < 1:
    f1()
    ... # write 1 to the file
if n < 2:
    f2()
    ... # write 2 to the file
if n < 3:
    f3()
    ... # write 3 to the file
...

如果每个函数确实一个,但是没有嵌套。

如果函数可以按不同的顺序运行,则可以为每个文件写一个不同的文件,也可以按照您的建议将不同的行写到一个文件中,但是我不明白为什么它必须嵌套ifs。

答案 1 :(得分:1)

使用环境变量的其他解决方案,您可以定义一个实用程序函数,该函数将调用所有函数。它将检查是否设置了环境变量。

import os
def utiltiy_function():
    function_count = os.environ.get("function_count")
    if not function_count:
        os.environ['function_count']=0 #this will set initially value when the function has not been called
    if function_count==0:
         func_1()
    elif function_count==1:
         func_2()
    elif function_count==2:
         func_3()
    elif function_count==3:
         func_4()
    else:
         pass

在每个函数末尾,您都可以更新环境变量的值。如果您仍然不确定,请告诉我。

答案 2 :(得分:1)

将函数调用置于带有键盘中断的try / catch中

n

这减少了将fn写入文件的代码重复。

如果您希望功能以什么顺序运行,可以执行以下操作:

fn = 0 # read from file
try:
    if fn < 1: f1()
    fn=1
    if fn < 2: f2()
    fn=2
    ...
except KeyboardInterrupt: # user stopped
    ... # write fn to file

如果您希望程序在完全运行后重置,请尝试以下操作:

fn = 0 # read from file
fn_reached = fn
functions = [f1, f2, f3, f4] # list of function objects
try:
     for f in functions[fn:]:
         f()
         fn_reached += 1
except KeyboardInterrupt:
     ... # write fn_reached to file