我试图弄清楚如何访问我的 Snakefile 中的 Snakemake 参数,例如设置目标规则(由用户指定或第一个定义的规则)。我能够使用 找到环境中的一些设置dir()
,但不是目标规则。这甚至可以访问吗?
编辑:我想在运行开始时打印最重要参数的概述,包括用户 ID、配置文件的路径以及目标规则(因为我们的工作流有多个端点/目标规则,我找到了将其记录在某处很有用)。
经过更多的挖掘,我找到了workflow
包含一些有用信息的对象,但是first_rule
设置为None
. 我本来希望将该属性设置为目标规则,但也许我还没有理解它的目的,和/或不应该从workflow
对象中提取任何信息。
我知道我可以使用该--report
功能来获取大量信息 - 我们确实使用它 - 但希望独立于它。
谢谢!
从更新的问题来看,它似乎确实workflow
很有用。具体来说,一种选择是迭代工作流中的所有规则(请参阅相关答案),在迭代期间提取感兴趣的信息。专门针对目标规则信息,snakemake -j 1
在下面的 Snakefile 上运行似乎输出了所需的信息:
rule all:
input:
"a.txt",
"b.txt",
rule a:
output:
"a.txt",
shell:
"""
echo "a" > {output}
"""
rule b:
output:
"b.txt",
default_target: True,
shell:
"""
echo "b" > {output}
"""
print(workflow.default_target)
# will print b
需要注意的一点是printing
,如果您正在执行集群提交,或者您的规则具有对传入数据敏感的 shell 命令,那么将信息记录到文件中而不是打印到标准输出可能会更好。至少我有一些不明显的错误的经验,这些错误最终可以追溯到我在 Snakefile 中打印。
更新:这是针对边缘情况的 hack,但如果有人对动态修改 感兴趣,default_target
可以执行以下操作(这只是伪代码,未经测试):
# assume that config contains the name of the desired target rule
default_target = config["default_target"]
for n, r in enumerate(workflow.rules):
if r.name == default_target:
r.default_target = True
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句