如何便捷获取Snakemake中shell()生成的实例化命令内容?
如何便捷获取Snakemake中shell命令的实例化内容?
我使用的Snakemake版本为8.20.6,以下代码片段来自snakemake-wrappers项目的fastp wrapper:
cmd = ( "(fastp --thread {snakemake.threads} " "{extra} " "{adapters} " "{reads} " "{trimmed} " "{json} " "{html} ) {log}" ) shell(cmd)
我希望获取cmd的实例化内容,虽然用cmd.format(...)可以实现,但操作过于繁琐。既然shell()能够执行该命令,说明它可以自动填充占位符,我查看了shell.py源码,但未找到可直接获取实例化内容的函数或变量,想请教是否有便捷的方法获取cmd的实例化内容?
解决方法
有几种简单的方式可以拿到填充后的完整命令:
启用调试日志直接查看
运行Snakemake时添加--debug参数,日志中会输出每个rule执行的完整shell命令,包含所有填充好的占位符。无需修改任何代码,直接执行:snakemake --debug临时修改wrapper打印命令
在shell(cmd)前添加两行代码,利用snakemake对象直接完成格式化并打印:filled_cmd = cmd.format(snakemake=snakemake) print(filled_cmd) shell(cmd)这里不需要手动指定每个参数,
snakemake对象已经包含了所有需要的变量,直接传入即可。通过API获取rule的shellcmd属性
如果需要批量查看或在脚本中获取,可以用Snakemake API读取rule的shellcmd属性:from snakemake import Workflow wf = Workflow(snakefile="你的Snakefile路径") wf.include("你的Snakefile路径") for rule in wf.rules: if rule.name == "目标rule名称": print(rule.shellcmd)
内容的提问来源于stack exchange,提问作者ManJi
相关产品推荐
相关产品推荐

