为什么 Snakemake 更喜欢使用脚本指令调用脚本而不是从 shell 调用?

问题描述 投票:0回答:1

标准化工作流程中的Snakemake规则使用

script
指令运行Python脚本,例如这个模板规则:

rule XXXXX:
    input:
        ...,
    output:
        ....,
    params:
        ...,
    conda:
        "../envs/python.yaml"
    script:
        "../scripts/XXXX.py"

然后在脚本中,可以使用

snakemake
对象。然而,脚本随后与该规则紧密耦合,这似乎是一个很大的缺点。

为什么这种方法比使用调用脚本的 shell 的方法更受欢迎,例如在这条规则中?

rule XXXXX:
    input:
        ...,
    output:
        ....,
    params:
        absolute_script_path = ..., # get
        argument1 = ..., 
    conda:
        "../envs/python.yaml"
    shell:
        "python {params.absolute_script_path} {input} {params.argument1} > {output}"

在这种方法中,python 脚本与 Snakemake 规则分离。而且它看起来更有凝聚力,因为被调用的参数在规则中是明确的,而不是隐藏在脚本中。 我只是开始编写 Snakemake 工作流程,所以我只是一个初学者。我不明白为什么第一种方法比第二种方法更受欢迎(或用于标准化的 Snakemake 工作流程)?我错过了什么吗?第二种方法有问题吗? 非常感谢您的回答!

python bioinformatics snakemake
1个回答
1
投票

script
方法在脚本可以通过
params
和其他指令访问的对象方面更加灵活。如果您遵循
shell
方法,您可能会发现(重新)定义
argparse
或其他方法以正确考虑通过
shell
传递的参数。它将主要是样板文件,但可能会有些乏味。

总而言之,没有硬性规定,因此一种或方法可能更适合/方便给定的工作流程。

© www.soinside.com 2019 - 2024. All rights reserved.