Snakemake中当前规则的名称

gli*_*ihm 6 python python-3.x snakemake

我正在与Snakemake合作,但找不到找到当前规则名称的方法

例如,有没有办法像这样进行访问:

rule job1:
    input: check_inputs(rules.current.name)
    output: ...
Run Code Online (Sandbox Code Playgroud)

check_inputs每个规则的功能大致相同时,这将非常有用。

当然,我做到了,它的工作原理是:

rule job1:
    input: check_inputs("job1")
    output: ...
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否存在一种更多的“ Snakemaker方式”来获取当前规则的名称,以避免每次都编写/硬编码该规则的名称。

任何帮助或建议将不胜感激。

--- EDIT1 ---只有当snakemake解析了and 语句时,才能
访问规则名称。因此在/ 定义中无法使用。{rules.myrule.name}inputoutput{rules.myrule.name}inputoutput

这样做的想法是例如快速访问当前规则的名称{rules.current},因为{rules.myrule.name}它也是重复的。

gut*_*orm 3

(编辑:提出了解决方法)

{rule}可在 shell:/run: 指令期间用于规则名称。正如 op 所说,这在input/output:. 然而,当前的模板是一种解决方法

myrule = "foo"
rule foo:
    output: touch(myrule + ".ok")
    shell:
        'echo "I am {rule}, making {output}"'
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,引入变量myrule是不必要的,因为它只使用一次。但当您想在各种 Snakemake 指令中多次使用规则名称时,它更有意义。它还有助于规则模板化。