我试图将规则名称,通配符和外部作业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}
答案 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
的项。
(未经测试)