如何访问 Snakefile 中的 Snakemake 参数?

罗曼希尔耶

我试图弄清楚如何访问我的 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章