如何在Snakemake中实现文件变更时自动执行对应规则?
方案1:使用Snakemake内置监听功能(推荐,适用于Snakemake 7.0及以上版本)
Snakemake原生提供了--watch(可简写为-w)参数,开启后会自动监听工作流所有输入文件的变更,一旦检测到修改就自动重新执行需要更新的任务,可直接替代你原来Makefile中的watch规则。
你只需要先编写正常的Snakemake工作流规则,以编译LaTeX为例:
# Snakefile内容 rule all: input: "main.pdf" rule compile_latex: input: "main.tex" output: "main.pdf" shell: "latexmk -lualatex --shell-escape {input}"
编写完成后运行以下命令即可开启自动监听构建:
snakemake --watch --cores 1
如果需要指定监听特定路径而非所有工作流输入,可在参数后追加路径:
snakemake --watch ./src --cores 1
方案2:手动结合inotifywait实现(兼容Snakemake旧版本)
如果你使用的是7.0以下版本的Snakemake,没有内置watch功能,可以直接复用你之前Makefile的逻辑,手动写监听脚本:
首先编写好正常的Snakemake工作流规则,然后执行以下bash命令即可:
# 单个依赖文件场景 while true; do inotifywait --event modify main.tex; snakemake --cores 1; done
如果有多个依赖文件,可统一声明后使用:
DEPENDENCIES="main.tex refs.bib figures/*" while true; do inotifywait --event modify $DEPENDENCIES; snakemake --cores 1; done
内容的提问来源于stack exchange,提问作者Nick Ulle
相关产品推荐
相关产品推荐

