如何访问Snakefile中的snakmake选项

时间:2019-03-04 16:34:59

标签: snakemake

尤其是,当且仅当notemp选项为False时,我想访问notemp选项以删除“ onsucces”附加临时文件。

我要这样做是因为我对bgzip vcf文件有一个非常基本的规则,并且我不能将其输出定义为temp(),因为该规则既用于生成临时文件,也用于生成最终的输出文件。

编辑

如果

临时文件与另一个规则的输入相对应并且该规则执行了某些操作(而不是规则all),则不会删除它们。 这是一个示例:

rule all:
    input: "output2.gz"

rule zcat:
    input : "output.gz"
    output: temp("output2")
    shell:
        "zcat {input} > {output}"

rule cp:
    input : "input"
    output: temp("output")
    shell:
        "cp {input} {output}"

rule gzip :
    input:"{file}"
    output: temp("{file}.gz")
    shell:
        "gzip -c {input} > {output}"

1 个答案:

答案 0 :(得分:0)

您可以扫描列表sys.argv中是否存在notemp标志,请注意,如果在命令行中可以明确指定选项,则可以用较短的形式指定这些选项。例如。 --not--notemp相同。

最重要的是

  

我无法将其输出定义为temp(),因为该规则用于生成临时文件,但也用于生成最终输出文件

这向我表明您没有在规则中正确指定输入和输出文件,因为snakemake不会删除仍然需要的临时文件。可能是在输出中产生了必要的文件,但在必要时未将其列出为输入。例如,以下规则parse_bam将失败,因为samtools需要.bai索引。该索引已在规则bam中正确创建,但是由于temp标志而被立即删除。解决方案是将a.bam.bai列为规则parse_bam

的输入
rule bam:
    output:
        temp('a.bam'),
        temp('a.bam.bai'),
    shell:
         "code to make bam and bai"

rule parse_bam:
    input:
        'a.bam'
    output:
        'b.bam'
    shell:
         """
         samtools view {input} chr1 > {output}
         """