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

Snakemake指定输出组合调用程序报MissingInputException求解

错误原因

  • 通配符匹配规则错误:你将程序的全路径作为program通配符的匹配值,但输出文件名中仅包含program_1/program_2/program_3这类标识字符串,两者不匹配导致Snakemake找不到生成目标文件的对应规则,因此抛出缺失输入的错误(Snakemake会把找不到生成规则的目标文件当成需要提前存在的输入文件)。
  • 脚本开头未导入re库,正则相关操作会执行失败。
  • 原有Shell命令直接传递fa文件路径,不符合程序要求的「读取文件内容作为参数」的逻辑。
  • 未适配不同程序的额外参数需求。

修正后完整Snakefile

import re

# 读取预定义输出文件列表
with open("snakemake_output_small.txt", "r") as f:
    out = [line.strip() for line in f if line.strip()]

# 提取所有合法通配符取值
hsa_set = set([x.split('__')[0] for x in out])
nm_set = set([re.sub(r'_program_.*', '', x.split('__')[1]) for x in out])
# 输出文件名中program标识的合法值
program_tag_set = {'program_1', 'program_2', 'program_3'}

# 配置程序路径和额外参数
program_config = {
    'program_1': {
        'path': 'full/path/to/program_1',
        'extra_params': ''
    },
    'program_2': {
        'path': 'full/path/to/program_2',
        'extra_params': '-d'
    },
    'program_3': {
        'path': 'full/path/to/program_3',
        'extra_params': '-P here/a/parameter/file'
    }
}

# 严格限制通配符取值范围,避免非法匹配
wildcard_constraints:
    hsa = '|'.join([re.escape(x) for x in hsa_set]),
    nm = '|'.join([re.escape(x) for x in nm_set]),
    program_tag = '|'.join([re.escape(x) for x in program_tag_set])

rule all:
    input: out

rule run_program:
    input:
        hsa_fa = 'full/path/to/dir1/{hsa}.fa',
        nm_fa = 'full/path/to/dir2/{nm}.fa'
    output:
        '{hsa}__{nm}_{program_tag}.txt'
    params:
        program_path = lambda wc: program_config[wc.program_tag]['path'],
        extra_params = lambda wc: program_config[wc.program_tag]['extra_params']
    shell:
        r"""
        {params.program_path} {params.extra_params} $(cat {input.nm_fa}) $(cat {input.hsa_fa}) > {output}
        """

额外说明

  • 如果你的预定义输出文件名里的程序标识是programm_1(多了一个m),只要把program_tag_set和program_config的key对应改成programm_1/programm_2/programm_3即可。
  • 该配置原生支持Snakemake集群调度,只需要按照你的集群调度器配置对应的集群提交参数即可正常并行执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:06:01