作者Rollnmeow (OHAI)
看板Python
标题[问题] 如何让script能在上次中断处继续执行
时间Wed May 29 11:57:51 2024
大家好,因为工作上的需求写了一个目标系统为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()
...
但这样写我认为不直观,未来要改变执行顺序时也不好维护,
想请教各位是否有建议可以提供?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.200.78.60 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1716955075.A.2A7.html
1F:推 avonasac0800: var变数改成bool型态的has_been_rebooted就很直观 05/29 14:27
2F:→ avonasac0800: 啦,而且你不管多不多这个判断,未来改变执行顺序 05/29 14:27
3F:→ avonasac0800: 的工都一样,不会因为没这个判断就比较少呀? 05/29 14:27
4F:推 tzouandy2818: 你觉得这样太乱 可以改在func1跟2里判断 重开过就直 05/29 14:53
5F:→ tzouandy2818: 接early return 05/29 14:53
6F:→ Rollnmeow: 听起来在每个func内各自做判断然後early return, 05/29 16:42
7F:→ Rollnmeow: 比较符合我现在的需求。 05/29 16:42
8F:→ Rollnmeow: 实际的程式码有10个以上的func,还需要重开4次, 05/29 16:42
9F:→ Rollnmeow: 若考虑到保留调换执行顺序的弹性,这样比较好改 05/29 16:42
10F:→ Rollnmeow: 那如果要各自判断的话,是不是用装饰器比较好? 05/29 16:43
11F:→ lycantrope: 有没有用装饰器无跟好不好无关... 05/29 16:46
12F:→ mantour: 有没有可能某个function前面做过一次後来又要做一次 05/29 17:19
13F:→ mantour: 如果用一个list存执行步骤, 然後读一个N进来决定要从第几 05/29 17:20
14F:→ mantour: 步继续跑? 这样要改顺序也很容易 05/29 17:20
15F:→ mikapauli: 直接写排程 05/29 18:31
16F:推 mpk: 重开机前先存一些资料到database或是先连到某个网页存资料 05/30 15:57
17F:→ anhi: 若func各自判断的逻辑都一样,可以写个装饰器来处理就好 06/01 01:06
18F:推 ddavid: 状态机。每个 function 都在开头加上只有进入特定状态才执 06/03 18:09
19F:→ ddavid: 行的条件,并且执行完会让状态改变,应该可以比较容易满足 06/03 18:10
20F:→ ddavid: 你随时可能变换顺序设定的需求?只要改头尾的状态判定与改 06/03 18:10
21F:→ ddavid: 变就好。 06/03 18:10
22F:推 bills1987: fun2完成後写入档案ready > fun3.txt , 最开头发现有这 06/14 20:49
23F:→ bills1987: 档案就goto, 执行完成就砍掉 06/14 20:49