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

如何阻止Snakemake重新生成指定输入文件?

解决Snakemake测试中输入文件被误判过期的问题

针对你开发的Snakemake工作流测试框架,要阻止Snakemake重新生成输入文件、仅运行指定测试规则,这里给你几个可行的落地方案:

1. 用--rules实现规则白名单

Snakemake的--rules参数可以直接指定仅运行哪些规则,完全符合你要的白名单需求。执行时Snakemake只会处理你列出的规则,以及这些规则直接依赖的已存在输入(不会触发上游规则重生成输入),如果指定规则无法生成目标(比如依赖缺失)会直接报错,刚好适配测试场景。

示例命令:

snakemake --rules test_rule1,test_rule2 --directory ./test_workdir

2. 配置--rerun-triggers避免误触发重跑

--rerun-triggers的可选值包括:mtime, checksum, input, params, wildcards, software-env, container。要避免因输入文件的时间或内容变化触发重跑,你可以把触发条件限制为仅当规则参数或通配符变化时才重跑:

示例命令:

snakemake --rules test_rule --rerun-triggers params,wildcards

这样设置后,只要输入文件对应的规则参数和通配符没变化,哪怕文件mtime更新,Snakemake也不会认为它过期。

3. 用--touch标记输入文件为最新

关于--touch的工作机制,明确两点:

  • 它会更新目标文件(包括软链接)的mtime到当前时间,软链接的话更新的是链接本身的时间,不是源文件
  • 同时会在.snakemake/metadata目录中记录文件状态,标记为已更新,让Snakemake认定它是最新版本

你可以在测试前先对所有输入文件执行touch操作,彻底避免Snakemake判定输入过期:

示例命令:

snakemake --touch input_file1.txt input_file2.bam --directory ./test_workdir

优化后的完整测试流程

把上述方案结合起来,你的测试流程可以调整为:

  1. 创建空工作目录
  2. 将输入文件复制或软链接至该目录
  3. 标记输入文件为最新:
    snakemake --touch $(echo ${INPUT_FILES[@]}) --directory ./test_workdir
    
  4. 仅运行待测试规则并限制重跑触发条件:
    snakemake --rules <target-rules> --rerun-triggers params,wildcards --directory ./test_workdir
    
  5. 检查预期输出文件的存在性与内容一致性

内容的提问来源于stack exchange,提问作者JaredL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 11:28:21