如何在Snakemake中将stderr和stdout重定向全局设置为日志文件?

时间:2018-12-26 00:53:21

标签: snakemake

我正在使用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的日志文件的预期结果,但是我想全局设置而不是为每个规则设置。

0 个答案:

没有答案