如何根据输入值让Python实验从指定任务起点重启运行?
实验程序重启功能实现方案
需求说明
开发Python实验程序时,需要支持中途退出后从指定任务重启:调用run时传入restart=True,弹出对话框让用户输入任务名称,程序跳过前置任务,直接从该任务开始执行后续所有任务。现有代码已实现重启点输入逻辑,需完善run函数的任务执行逻辑。
实现思路
把所有任务按执行顺序整理成任务列表,每个元素包含任务名称和对应的执行逻辑。这样可以根据用户输入的重启点,快速定位到任务在列表中的位置,然后从该位置开始依次执行后续任务。
修改后的完整代码
def __init__(self, portname, restart=False): self.__port_name = portname self.__path = '/Users/emilia/Documents/Dementia task piloting/Lumo' self.__restart = restart # 定义任务顺序列表:(任务名称, 执行逻辑) self.__task_sequence = [ ("auditory_staircase", lambda: self.__auditory_staircase(5)), ("object_recognition", lambda: self.__object_recognition()), ("resting_state", lambda: self.__resting_state()), ("simple_motor_task", lambda: self.__simple_motor_task()), ("naturalistic_motor_task", lambda: self.__naturalistic_motor_task()), ("end_all_experiment", lambda: self.__end_all_experiment()) ] def __restart(self): if self.__restart: restart_point = {'Task to restart from': ''} dlg = gui.DlgFromDict(dictionary=restart_point, sortKeys=False, title='Where do you want to restart from?') if not dlg.OK: print("User pressed 'Cancel'!") core.quit() return restart_point['Task to restart from'] else: return None def run(self): start_point = self.__restart() if start_point: # 查找重启任务的索引 start_idx = None for idx, (task_name, _) in enumerate(self.__task_sequence): if task_name == start_point: start_idx = idx break # 处理无效任务名称的情况 if start_idx is None: print(f"Error: 任务'{start_point}'不存在") core.quit() # 从重启点开始执行后续任务 for task_name, task_func in self.__task_sequence[start_idx:]: print(f"开始执行任务: {task_name}") task_func() else: # 正常顺序执行所有任务 for task_name, task_func in self.__task_sequence: print(f"开始执行任务: {task_name}") task_func()
关键说明
- 任务列表设计:用
lambda表达式包装带参数的任务(比如__auditory_staircase(5)),确保调用时能正确传递参数。 - 重启点定位:遍历任务列表匹配用户输入的任务名称,找到对应的起始索引。
- 异常处理:如果用户输入的任务名称不存在,打印错误信息并退出程序。
- 统一执行逻辑:无论是否重启,都复用同一任务列表执行,避免代码冗余。
内容的提问来源于stack exchange,提问作者sallicap
相关产品推荐
相关产品推荐

