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

如何解决Snakemake报错‘Missing output files’问题?

Snakemake工作流执行报错排查与解决

环境依赖:Python 3.10,Snakemake 7.32

问题场景

编写了如下Snakefile,运行时出现报错:

Snakefile内容

rule A:
    input:
        i = 'B1477.all_merged_3split_dedupped_sorted.bam'
    output:
        o = 'B1477.all_merged_3split_dedupped_sorted2.bam'
    shell:
        "samtools view {input.i} > {output.o}"

报错信息(翻译后)

构建作业的有向无环图(DAG)...
作业统计:
job      count
-----  -------
A            1
total        1

[2024年4月2日 19:31:43]
rule A:
    输入: B1477.all_merged_3split_dedupped_sorted.bam
    输出: B1477.all_merged_3split_dedupped_sorted2.bam
    作业ID: 0
    原因: 缺失输出文件: B1477.all_merged_3split_dedupped_sorted2.bam
    资源: tmpdir=/tmp

samtools view B1477.all_merged_3split_dedupped_sorted.bam > B1477.all_merged_3split_dedupped_sorted2.bam
作业统计:
job      count
-----  -------
A            1
total        1

原因:
    (查看上方单个作业获取详情)
    缺失输出文件:
        A

这是一次预运行(使用了-n参数)。作业顺序不反映实际执行顺序。

问题分析

  1. 预运行模式导致无实际输出:报错明确标注This was a dry-run (flag -n),预运行模式下Snakemake只会模拟执行流程,不会实际运行shell命令生成输出文件,因此会检测到输出文件缺失。
  2. samtools命令参数错误:samtools view默认输出SAM文本格式,直接重定向到.bam后缀的文件会得到格式不匹配的文件,后续可能引发其他问题。

解决方案

1. 取消预运行模式,实际执行作业

运行Snakemake时去掉-n参数,直接执行:

snakemake

2. 修正samtools命令,生成正确的BAM文件

在samtools view后添加-b参数指定输出BAM格式,还可添加-@ <线程数>启用多线程加速,修改后的Snakefile如下:

rule A:
    input:
        i = 'B1477.all_merged_3split_dedupped_sorted.bam'
    output:
        o = 'B1477.all_merged_3split_dedupped_sorted2.bam'
    shell:
        "samtools view -b -@ 4 {input.i} > {output.o}"

(注:-@ 4表示使用4个线程,可根据服务器配置调整)

3. 可选:简化Snakefile写法

如果不需要命名输入输出,可简化为:

rule A:
    input: 'B1477.all_merged_3split_dedupped_sorted.bam'
    output: 'B1477.all_merged_3split_dedupped_sorted2.bam'
    shell:
        "samtools view -b -@ 4 {input} > {output}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:42:49