Python doit(pydoit)中watch参数的预期行为及异常问题咨询
关于pydoit中watch参数未触发任务重新评估的问题
这是预期行为,并非bug,具体原因和解决方案如下:
watch参数的核心作用
pydoit的watch参数不参与常规doit命令的任务执行评估逻辑,它是配合doit auto命令使用的——只有运行doit auto时,它才会监控指定目录/文件的变化,自动重新触发相关任务。在普通doit执行流程中,watch不会影响任务是否重新执行的判断。和file_dep的本质差异
file_dep(或dir_dep)属于任务的依赖定义,pydoit在执行常规doit命令时,会主动校验这些依赖的文件/目录是否有变更,一旦检测到变化就会标记任务为需要重新执行。这是file_dep能触发任务重跑的核心原因,而watch不参与这个依赖评估环节。代码中的额外限制:run_once
你的任务配置了'uptodate': [run_once],这个内置检查器会强制任务仅执行一次,无论其他条件如何变化——哪怕你用file_dep,只要保留这个配置,任务也不会因文件变化重新执行。这也是你观察到watch参数无效果的关键因素之一。
解决方案
- 若希望目录文件变化时,常规
doit命令能自动重新执行任务:将watch替换为dir_dep(针对目录)或file_dep(针对文件),同时移除run_once配置。 - 若想使用
watch的自动监控能力:运行doit auto命令,并且移除run_once配置,这样监控到目录变化时会自动重新触发任务。
内容的提问来源于stack exchange,提问作者Kabira K
相关产品推荐
相关产品推荐

