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

Snakemake中如何直接引用某规则的输出作为下一规则的输入

Snakemake跨规则引用输出的正确实现方案

你写法失效的核心原因是缺少Snakemake内置的rules命名空间前缀,引用其他规则的输出时需要加上此前缀才能被正确解析。

基础场景修正示例

rule A:
    input:
         in_file = "path/to/in_file"
    output:
          out_file = "path/to/out_file"
    shell:
       "...."

rule B:
    input:
         # 加上rules.前缀即可正常引用规则A的输出
         in_file = rules.A.output.out_file
    output:
          # 注意不要和上游规则的输出路径完全重复,避免冲突
          out_file = "path/to/final_output_file"
    shell:
       "...."

注意事项

  • 规则定义顺序要求:被引用的规则必须定义在引用它的规则之前,否则Snakemake解析工作流时会找不到对应规则对象
  • 该引用方式天然支持带通配符的批量工作流场景,Snakemake会自动匹配对应通配符的上游输出路径,无需手动拼接

带通配符的批量场景示例

# 总目标规则,定义要生成的所有最终文件
rule all:
    input:
        expand("variants/{sample}.vcf", sample=["sample1", "sample2", "sample3"])

# 上游序列比对规则
rule align:
    input:
        "raw_data/{sample}.fastq"
    output:
        bam = "aligned/{sample}.sorted.bam"
    shell:
        "bwa mem reference.fasta {input} | samtools sort -o {output.bam}"

# 下游变异检测规则,直接引用上游规则的输出
rule call_variant:
    input:
        bam = rules.align.output.bam
    output:
        vcf = "variants/{sample}.vcf"
    shell:
        "gatk HaplotypeCaller -R reference.fasta -I {input.bam} -O {output.vcf}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:36:03