gpt4 book ai didi

logging - snakemake - 为每个规则动态设置日志

转载 作者:行者123 更新时间:2023-12-05 05:29:55 37 4
gpt4 key购买 nike

我想为每个工作流规则动态设置日志文件(log 指令),因此它包含规则名称。我尝试像使用 set_params() 一样使用 set_log() 函数,但遇到了一个神秘错误。这是我尝试过的:

logs_dir = config['logs_dir']

rule1:
...

rule2:
...

for r in workflow.rules:
r.set_log(os.path.join(logs_dir, r.name + '.log'))

并获取:AssertionError in file ... in line ...
我可能误用了 set_log,但无法弄清楚。有什么想法吗?

更新
按照答案中的建议,我尝试了以下操作:

rule all:
input:
'b'

rule myrule:
input:
'a'
output:
'b'
log:
dummy = 'dummy.log'
shell:
"""
cp {input} {output}
"""

for r in workflow.rules:
r.set_log(real=r.name + '.log')

不幸的是,使用 snakemake -s snakefile -j 1 运行它再次导致未指定的断言错误。

最佳答案

定义了set_log 函数here我认为它最终会遇到 this assertion抛出这个非常不提供信息的 AssertionError。修复它的方法是为每个规则添加一个内联日志定义:

logs_dir = config['logs_dir']

rule1:
log: "rule1.log"
...

rule2:
log: "rule2.log"
...

for r in workflow.rules:
r.set_log(os.path.join(logs_dir, r.name + '.log'))

不幸的是,这违背了循环和设置日志的目的(如果我正确理解你想在这里做什么)。我最近遇到了一个非常相似的问题,即设置线程时没有在每个规则中定义 threads 值。从这个角度来看有点烦人,但我认为这种行为背后有充分的理由。

您仍然可以避免在每个规则中写入 log: 'rule_name.log' 的一种方法是使用 rule inheritance尽管我不完全确定传递名称和通配符是如何工作的。如果你得到这样的东西,请告诉我。

关于logging - snakemake - 为每个规则动态设置日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74822755/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com