为什么我的带通配符的 snakemake 规则变成了本地规则?

Why is my snakemake rule with wildcards turned into a localrule?

所以,我制作了这个简单的 Snakefile,我想知道为什么我的规则被解释为 localrule。通常这不是问题,但对于我需要提交给 SLURM 的运行来说是问题。我让它工作的唯一方法是在没有通配符的情况下显式编写规则。然后它没有被解释为localrule。但是后来我显然失去了通配符对我的规则的所有好处......我想我在这里缺少一些东西!

rule test:
  output: "bla4_out.txt",

rule test_wild:
  input: "bla{num}.txt",
  output: "bla{num}_out.txt",
  shell:
    """
touch {output}"
    """

这个: snakemake -n -R test 导致

Building DAG of jobs...
Job stats:
job      count    min threads    max threads
-----  -------  -------------  -------------
test         1              1              1
total        1              1              1


[Mon May  9 13:02:41 2022]
localrule test:
    output: bla4_out.txt
    jobid: 0
    resources: tmpdir=/tmp

Job stats:
job      count    min threads    max threads
-----  -------  -------------  -------------
test         1              1              1
total        1              1              1

This was a dry-run (flag -n). The order of jobs does not reflect the order of execution.

如果规则没有执行某些操作的指令,例如 shellrun,则该规则被标记为本地。我想这是有道理的......尝试向你的规则 test 添加一个虚拟 shell 指令,看看会发生什么。