Snakemake修改输出目录后出现MissingOutput Exception错误
Snakemake MissingOutputException 问题修复:多组基因组核心分析任务拆分
问题根源
当前Snakefile把3组基因组分析任务打包到同一个job里执行,但你的corecruncher_master.py脚本单次运行只能处理一个基因组列表文件,生成一个对应输出目录。原规则中同时传入3个-list和3个-out参数,脚本只会处理第一个参数对应的任务,导致另外两个输出目录根本没生成,Snakemake检测到缺失后抛出MissingOutputException。
修复方案:拆分独立任务
修改Snakefile,让每个基因组组对应一个独立的Snakemake任务,通过通配符实现参数化:
修复后的完整Snakefile
configfile: "config_cand.yaml" # 汇总规则:依赖所有核心基因组分析任务的输出 rule Gene_flow_between_species_all: input: expand("{dir_path}/core_genome", dir_path=config["dirname"]) # 参数化规则:每个config中的dirname对应一个独立任务 rule Gene_flow_between_species: input: dir="Campylobacter/genomes", liste="{dir_path}/path_to_genome_list.txt" output: directory("{dir_path}/core_genome") shell: '''python pipelines/CoreCruncher/corecruncher_master.py \ -in {input.dir} \ -out {output} \ -list {input.liste} \ -freq 85 -prog usearch -ext .fa -length 80 -score 70 -align mafft'''
关键修改说明
- 移除全局变量:删掉原代码中的
dirname = config["dirname"],直接在expand中调用config["dirname"],避免路径打包 - 使用通配符
{dir_path}:Snakemake会自动遍历config里的3个dirname条目,生成3个独立的job,每个job对应一组基因组分析 - 输入输出一一绑定:每个任务的输入列表文件和输出目录严格对应,确保脚本单次只处理一组数据,生成对应的输出目录
验证与优化
- 先执行 dry-run 检查任务生成情况:
应该看到3个snakemake Gene_flow_between_species_all -nGene_flow_between_species任务,每个对应不同的dir_path - 如果文件系统存在延迟问题,运行时增加等待时间:
snakemake Gene_flow_between_species_all --latency-wait 30
内容的提问来源于stack exchange,提问作者Awa
相关产品推荐
相关产品推荐

