You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:45:03