[问题] 如何让script能在上次中断处继续执行

楼主: Rollnmeow (OHAI)   2024-05-29 11:57:51
大家好,因为工作上的需求写了一个目标系统为Windows的script,
程式码简化如下:
def main():
func1()
func2() # func2会让电脑重新开机
func3()
...
if __name__ == '__main__':
main()
问题出在func2执行完毕后会使电脑重新开机而使script执行中断,
而我希望重开完成后下一次执行时可以跳过func1跟func2,直接从func3处开始。
目前的做法是修改main(),引入一个新变量var和函式read_var,
并在重新开机以前建立一个档案写入数值:
def main()
# 新增一个var变量,
# 并使用read_var读取存在档案中的值指定给var
var = read_var()
if var == '0':
func1()
func2() # func2经修改后会在重开机前将'1'写入档案中
if var == '1':
func3()
...
但这样写我认为不直观,未来要改变执行顺序时也不好维护,
想请教各位是否有建议可以提供?
作者: avonasac0800 (Adolph)   2024-05-29 14:27:00
var变量改成bool型态的has_been_rebooted就很直观啦,而且你不管多不多这个判断,未来改变执行顺序的工都一样,不会因为没这个判断就比较少呀?
作者: tzouandy2818 (Naked Bear)   2024-05-29 14:53:00
你觉得这样太乱 可以改在func1跟2里判断 重开过就直接early return
楼主: Rollnmeow (OHAI)   2024-05-29 16:42:00
听起来在每个func内各自做判断然后early return,比较符合我现在的需求。实际的程式码有10个以上的func,还需要重开4次,若考虑到保留调换执行顺序的弹性,这样比较好改那如果要各自判断的话,是不是用装饰器比较好?
作者: lycantrope (阿宽)   2024-05-29 16:46:00
有没有用装饰器无跟好不好无关...
作者: mantour (朱子)   2024-05-29 17:19:00
有没有可能某个function前面做过一次后来又要做一次如果用一个list存执行步骤, 然后读一个N进来决定要从第几步继续跑? 这样要改顺序也很容易
作者: mikapauli (桜花)   2024-05-29 18:31:00
直接写排程
作者: mpk (小赖x)   2024-05-30 15:57:00
重开机前先存一些资料到database或是先连到某个网页存资料
作者: anhi   2024-06-01 01:06:00
若func各自判断的逻辑都一样,可以写个装饰器来处理就好
作者: ddavid (谎言接线生)   2024-06-03 18:09:00
状态机。每个 function 都在开头加上只有进入特定状态才执行的条件,并且执行完会让状态改变,应该可以比较容易满足你随时可能变换顺序设定的需求?只要改头尾的状态判定与改变就好。
作者: bills1987 (土ㄅ)   2024-06-14 20:49:00
fun2完成后写入档案ready > fun3.txt , 最开头发现有这档案就goto, 执行完成就砍掉

Links booklink

Contact Us: admin [ a t ] ucptt.com