2024-09-28 22:30:46 发布
网友
有没有一种方法可以从Snakefile中以编程方式列出每个规则创建的日志文件?我要用水龙头吗?如果需要,怎么做?在
背景:我想打包并删除所有创建的日志文件(只有集群日志在一个单独的文件夹中;一些输出文件相应地称为日志文件)。为此,我想明确并排除可能由运行程序创建的日志文件,这些文件碰巧与日志glob匹配。在
是否有其他选择,例如解析shellcmd_跟踪文件会更容易?在
谢谢, 安德烈亚斯
你可以试着做以下事情
onsuccess: for rulename in dir(rules): the_rule = getattr(rules, rulename) if hasattr(the_rule, "log"): print(rulename, ":\t", getattr(the_rule, "log"))
在onerror中也类似。在
onerror
如果您的规则的日志文件中有一些通配符,那么可以将它放在展开中,以生成真实的日志文件名。在
我刚测试过这个:
最后得到如下输出:
all : [] combine_text : [] generate_text : ['text_A_1.log', 'text_B_1.log', 'text_A_2.log', 'text_B_2.log']
问题是,这会显示所有可能由snakefile生成的日志文件,而不是在特定运行中实际生成的日志文件(例如,如果这次不需要执行某些规则)。在
为了适应实际生成的日志文件,onsuccess(或onerror)可以采用不同的方式:
onsuccess
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时,可以看到所有输出文件的相应日志文件。在
snakemake summary
你可以试着做以下事情
在
onerror
中也类似。在如果您的规则的日志文件中有一些通配符,那么可以将它放在展开中,以生成真实的日志文件名。在
我刚测试过这个:
^{pr2}$最后得到如下输出:
问题是,这会显示所有可能由snakefile生成的日志文件,而不是在特定运行中实际生成的日志文件(例如,如果这次不需要执行某些规则)。在
编辑:另一种扩展日志文件名的方法
为了适应实际生成的日志文件,
onsuccess
(或onerror
)可以采用不同的方式:通过这个修改,我几乎获得了相同的文件名列表。唯一不同的是它们出现的顺序。在
在即将发布的3.9.0版中,当调用
snakemake summary
时,可以看到所有输出文件的相应日志文件。在相关问题 更多 >
编程相关推荐