访问由snakemake规则创建的日志文件

2024-09-28 22:30:46 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种方法可以从Snakefile中以编程方式列出每个规则创建的日志文件?我要用水龙头吗?如果需要,怎么做?在

背景:我想打包并删除所有创建的日志文件(只有集群日志在一个单独的文件夹中;一些输出文件相应地称为日志文件)。为此,我想明确并排除可能由运行程序创建的日志文件,这些文件碰巧与日志glob匹配。在

是否有其他选择,例如解析shellcmd_跟踪文件会更容易?在

谢谢, 安德烈亚斯


Tags: 文件方法程序文件夹规则编程方式集群
2条回答

你可以试着做以下事情

onsuccess:
    for rulename in dir(rules):
        the_rule = getattr(rules, rulename)
        if hasattr(the_rule, "log"):
            print(rulename, ":\t", getattr(the_rule, "log"))

onerror中也类似。在

如果您的规则的日志文件中有一些通配符,那么可以将它放在展开中,以生成真实的日志文件名。在

我刚测试过这个:

^{pr2}$

最后得到如下输出:

all :    []
combine_text :   []
generate_text :  ['text_A_1.log', 'text_B_1.log', 'text_A_2.log', 'text_B_2.log']

问题是,这会显示所有可能由snakefile生成的日志文件,而不是在特定运行中实际生成的日志文件(例如,如果这次不需要执行某些规则)。在

编辑:另一种扩展日志文件名的方法

为了适应实际生成的日志文件,onsuccess(或onerror)可以采用不同的方式:

import glob
onsuccess:
    for rulename in dir(rules):
        the_rule = getattr(rules, rulename)
        if hasattr(the_rule, "log"):
            print(rulename, ":\t", *[glob.glob(pattern) for pattern in expand(getattr(the_rule, "log"), letter=['*'], num=['*'])])

通过这个修改,我几乎获得了相同的文件名列表。唯一不同的是它们出现的顺序。在

在即将发布的3.9.0版中,当调用snakemake summary时,可以看到所有输出文件的相应日志文件。在

相关问题 更多 >