如何解决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参数)。作业顺序不反映实际执行顺序。
问题分析
- 预运行模式导致无实际输出:报错明确标注
This was a dry-run (flag -n),预运行模式下Snakemake只会模拟执行流程,不会实际运行shell命令生成输出文件,因此会检测到输出文件缺失。 - 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
相关产品推荐
相关产品推荐

