在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>
答案 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]} ..."