为什么在snakefile中设置`wildcard_constraints`会阻止删除标记为`temp`的文件?

时间:2016-10-26 11:12:33

标签: python snakemake

考虑以下snakefile:

NUMS = ["1", "2"]

#wildcard_constraints:
#    num="\d+"

rule all:
    input:
        "all_text.txt"

rule generate_text:
    output:
        text_file = temp("text_{num}.txt")
    shell:
        """
        echo "test" > {output.text_file}
        """

rule gather_results:
    input:
        expand("text_{num}.txt", num=NUMS)
    output:
        "all_text.txt"
    shell:
        """
        cat {input} > {output}
        """

如果我取消注释wildcard_constraints部分,则不会删除标记为temp的文件。

这可能是什么原因?

更多测试

wildcard_constraints放入规则中:

rule generate_text:
    output:
        text_file = temp("text_{num}.txt")
    wildcard_constraints:
        num="\d+"
    shell:
        """
        echo "test" > {output.text_file}
        """

这具有相同的效果:temp文件不会被删除。

将通配符约束放在generate_text规则的输出文件名中:

rule generate_text:
    output:
        text_file = temp("text_{num,\d+}.txt")
    shell:
        """
        echo "test" > {output.text_file}
        """

在这种情况下,temp文件将按预期删除。

将约束放在gather_results规则的输入文件名中:

rule gather_results:
    input:
        expand("text_{num,\d+}.txt", num=NUMS)
    output:
        "all_text.txt"
    shell:
        """
        cat {input} > {output}
        """

这会导致错误:

  

/ tmp / Snakefile第20行中的WildcardError:
  没有为通配符' num,\ d +'提供的值    文件" / tmp / Snakefile",第20行,

我怀疑这是由于使用了expand

1 个答案:

答案 0 :(得分:3)

我刚检查了源代码。你真的发现了一个bug。应用通配符约束时,标志将丢失。我已在主分支中修复它。