首次使用Snakemake构建工作流出现MissingInputException报错求助
错误原因排查
- 核心错误:错误地将
hmmsearch的命令参数写到了rule hmm的input字段中。Snakemake的input字段仅识别为需要读取的输入文件,会尝试查找名为hmmsearch --tblout output_tblout_egf --noali -E 99的文件,自然找不到抛出第一个MissingInputException。 - 连锁错误:因为
rule hmm执行失败,没有生成对应的output/{species}.out文件,所以rule create_archive依赖的输入文件不存在,抛出第二个缺失输入的报错。 - 额外问题:你注释掉的另一版hmm规则写法也存在问题,直接写
INPUT_FILE和OUTPUT_FILE不会自动解析通配符,无法匹配不同物种的输入输出文件。
修复方案
调整rule hmm的字段划分,将非文件类的命令参数放到专门的params字段即可,修改后完整的Snakefile如下:
ARCHIVE_FILE = 'output.tar.gz' # 单个输出文件 OUTPUT_FILE = 'output/{species}.out' # 单个输入文件 INPUT_FILE = 'proteins/{species}.fasta' # 构建输入文件列表 INP = glob_wildcards(INPUT_FILE).species print(INP) # 所有输出文件列表 OUT = expand(OUTPUT_FILE, species=INP) print(OUT) # 伪规则,用于触发全流程执行 rule all: input: ARCHIVE_FILE # hmmsearch执行规则 rule hmm: input: species=INPUT_FILE, hmm='hmm/EGF.hmm' params: cmd='hmmsearch --tblout output_tblout_egf --noali -E 99' output: OUTPUT_FILE shell: '{params.cmd} {input.hmm} {input.species} {output}' # 打包所有结果 rule create_archive: input: OUT output: ARCHIVE_FILE shell: 'tar -czvf {output} {input}'
运行前请提前确认两个前提条件:
hmm/EGF.hmm文件实际存在proteins目录下确实有匹配{species}.fasta命名格式的输入文件
内容的提问来源于stack exchange,提问作者Alex galvez morante
相关产品推荐
相关产品推荐

