修改日志文件的名称以包括jobid

时间:2019-07-15 19:42:44

标签: python snakemake

我试图将规则名称,通配符和外部作业ID包含到我的日志文件名中,以使管道更流畅地进行调试(例如:snakejob.<rulename>.<wildcard>.e<jobid>)。我找不到合并规则名称或作业ID的方法。默认的日志文件名称包含作业ID,因此我认为必须有一种方法可以做到这一点。 这是我的蛇文件中的规则示例:

rule index_input:
    input:
        vcf = "{region}/example.vcf"
    output: "{region}/example.vcf.tbi"
    resources:
        mem = 2,
    threads:1,
    log:
        logo = "log/{region}.o",
        loge = "log/{region}.e",
    shell:
        """
        tabix {input.vcf}
        """

这是我的执行文件的示例:

snakemake --ri \
        -s $SNAKEFILE \
        --drmaa " -l h_rt=24:00:00  \
                -l mfree={resources.mem}G \
                -l gpfsstate=0 \
                -pe serial {threads} \
                -V -cwd \
                -o {log.logo} \
                -e {log.loge} \
                -S /bin/bash" \
        --jobs $JOBNUM \
        --latency-wait $WAITTIME \
        --restart-times $RETRY \
        $1 $2 

有什么办法可以在我的蛇文件中做类似的事情

log:
        logo = "log/{rulename}{region}.o{jobid}"

或执行文件中的类似内容”

-o {jobname}{log.logo}.o{jobid}

1 个答案:

答案 0 :(得分:0)

我认为您可以使用通配符{rule}来包含规则名称。对于特定的通配符,可以使用params指令。例如:

rule one:
    input:
        ...
    output:
        '{region}.txt',
    params:
        jobname= '{region}',
    shell:
        ...

然后以以下方式执行:

snakemake --cluster "qsub -o log/{rule}.{params.jobname}.o{jobid}"

当然,将作业提交到集群的每个规则都必须包含jobname作为params的项。

(未经测试)