You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何便捷获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 12:24:56