我正在使用snakemake构建工作流程。我希望所有规则的stderr和stdout默认情况下分别重定向到文件logs / {rule} / {wildcards} .o和logs / {rule} / {wildcards} .e。我该如何实现?
以下代码通过添加给定规则的shell命令来实现我想要的功能。但是,我不想将此添加到每个规则中。我尝试使用shell.prefix(...),该命令在每个规则的前面加上前缀,但是我找不到在其中访问规则名称或规则通配符的方法。
SAMPLES = ['A', 'B']
rule all:
input:
expand('test.{sample}',sample=SAMPLES)
rule test_rule:
output: 'test.{sample}'
shell:
#These three lines need to be prepended for logging.
'mkdir -p logs/{rule}; '
'exec 2> logs/{rule}/{wildcards}.e; '
'exec 1> logs/{rule}/{wildcards}.o; '
#This is the actual code for the rule
'touch {output}; '
'echo "test for {wildcards.sample} created";'
' >&2 echo "error message"'
上面的代码给出了在logs / {rule} / {wildcards} .o / e中带有stdout和stderr的日志文件的预期结果,但是我想全局设置而不是为每个规则设置。