snakemake - 从集群提交包装器访问配置变量
snakemake - accessing config variables from cluster submission wrapper
我正在使用 snakemake --cluster "python qsub_script.py"
的集群提交包装器脚本。我需要传递一个取自 config['someVar']
的全局变量。这应该适用于所有规则。我可以将它添加到每个规则的 params
,然后使用 job_properties['params']['someVar']
访问它,但这可能不是最佳解决方案。有没有办法从提交包装器访问 config
?简单地使用 config['someVar']
给我一个 NameError
.
如果那不可能,你能推荐一个替代方案吗?我怀疑使用配置文件可能会有帮助,但无法弄清楚它如何与提交包装器交互。
问题陈述有点宽泛,因此下面的解决方案可能不是最佳解决方案,但它应该可以满足您的需求。具体来说,下面的代码允许修改工作流中的每个规则。
这是一个可重现的演示:
rule all:
input:
"a.txt",
"b.txt",
rule a:
output:
"a.txt",
shell:
"""
echo {params.val} > {output}
"""
rule b:
output:
"b.txt",
shell:
"""
echo {params.val} > {output}
"""
# this allows iteration across every rule using python syntax
# so complex business logic can be implemented
for n, r in enumerate(workflow.rules):
r.set_params(val=n)
对于您的特定 use-case,最后一段代码可能如下所示:
for r in workflow.rules:
r.set_params(someVar=config["someVar"])
其中 config
字典是在工作流中使用 configfile
定义的:
configfile: "config.yaml"
我正在使用 snakemake --cluster "python qsub_script.py"
的集群提交包装器脚本。我需要传递一个取自 config['someVar']
的全局变量。这应该适用于所有规则。我可以将它添加到每个规则的 params
,然后使用 job_properties['params']['someVar']
访问它,但这可能不是最佳解决方案。有没有办法从提交包装器访问 config
?简单地使用 config['someVar']
给我一个 NameError
.
如果那不可能,你能推荐一个替代方案吗?我怀疑使用配置文件可能会有帮助,但无法弄清楚它如何与提交包装器交互。
问题陈述有点宽泛,因此下面的解决方案可能不是最佳解决方案,但它应该可以满足您的需求。具体来说,下面的代码允许修改工作流中的每个规则。
这是一个可重现的演示:
rule all:
input:
"a.txt",
"b.txt",
rule a:
output:
"a.txt",
shell:
"""
echo {params.val} > {output}
"""
rule b:
output:
"b.txt",
shell:
"""
echo {params.val} > {output}
"""
# this allows iteration across every rule using python syntax
# so complex business logic can be implemented
for n, r in enumerate(workflow.rules):
r.set_params(val=n)
对于您的特定 use-case,最后一段代码可能如下所示:
for r in workflow.rules:
r.set_params(someVar=config["someVar"])
其中 config
字典是在工作流中使用 configfile
定义的:
configfile: "config.yaml"