如何在`shell`部分中访问Snakemake配置变量?

时间:2018-03-06 21:51:35

标签: snakemake

在snakemake中,我想从config指令中的shell:访问密钥。我可以使用{input.foo}{output.bar}{params.baz},但不支持{config.quux}。有没有办法实现这个目标?

rule do_something:
    input: "source.txt"
    output: "target.txt"
    params:
        # access config[] here. parameter tracking is a side effect
        tmpdir = config['tmpdir']
    shell:
        # using {config.tmpdir} or {config['tmpdir']} here breaks the build
        "./scripts/do.sh --tmpdir {params.tmpdir} {input} > {output}; "

我可以将我想要的配置部分分配给params下的密钥,然后使用{param.x}替换,但这会产生不必要的副作用(例如,参数保存在snakemake元数据中(即.snakemake/params_tracking)。使用run:代替shell:将是另一种解决方法,但直接从{config.tmpdir}块访问shell将是最理想的。< / p>

1 个答案:

答案 0 :(得分:2)

"./scripts/do.sh --tmpdir {config[tmpdir]} {input} > {output}; "

应该在这里工作。

文件中说明: http://snakemake.readthedocs.io/en/stable/snakefiles/configuration.html#standard-configuration

“为了将配置占位符添加到shell命令中,Python字符串格式化语法要求您省略键名称周围的引号,如下所示:”

shell:
    "mycommand {config[foo]} ..."