如何访问 Snakefile 中的 Snakemake 参数?
How to access Snakemake parameters inside Snakefile?
我想知道如何访问我的 Snakefile 中的 Snakemake 参数,例如设置的目标规则(由用户指定或第一个定义的规则)。我能够使用 dir()
在环境中找到一些设置,但找不到目标规则。那甚至可以访问吗?
编辑:我想在 运行 开头打印最重要参数的概述,包括用户 ID、配置文件路径、还有目标规则(因为我们的工作流程有多个 endpoints/target 规则,我发现将它记录在某个地方很有用)。
进一步挖掘后,我发现 workflow
对象包含一些有用的信息,但是 first_rule
被设置为 None
。我本来希望 属性 被设置为目标规则,但也许我还没有理解它的目的,and/or 不应从 workflow
对象中提取任何信息.
我知道我可以使用 --report
功能获取大量信息 - 我们确实在使用它 - 但希望独立于它。
谢谢!
从更新的问题来看,workflow
似乎很有用。具体来说,一种选择是迭代工作流中的所有规则(参见 ),在迭代过程中提取感兴趣的信息。具体针对目标规则信息,下面的Snakefile上的运行 snakemake -j 1
好像输出了需要的信息:
rule all:
input:
"a.txt",
"b.txt",
rule a:
output:
"a.txt",
shell:
"""
echo "a" > {output}
"""
rule b:
output:
"b.txt",
default_target: True,
shell:
"""
echo "b" > {output}
"""
print(workflow.default_target)
# will print b
关于 printing
的一个注意事项,如果您正在进行集群提交或您的规则具有对传入数据敏感的 shell 命令,则将信息记录到文件中可能比将信息记录到文件中更好. 打印到标准输出。至少我有一些 non-obvious 错误的经验,这些错误最终可以追溯到我在 Snakefile 中打印。
更新:这是针对边缘情况的 hack,但如果有人对动态修改 default_target
感兴趣,则可以执行如下操作(这只是伪代码,未经测试) :
# assume that config contains the name of the desired target rule
default_target = config["default_target"]
for n, r in enumerate(workflow.rules):
if r.name == default_target:
r.default_target = True
我想知道如何访问我的 Snakefile 中的 Snakemake 参数,例如设置的目标规则(由用户指定或第一个定义的规则)。我能够使用 dir()
在环境中找到一些设置,但找不到目标规则。那甚至可以访问吗?
编辑:我想在 运行 开头打印最重要参数的概述,包括用户 ID、配置文件路径、还有目标规则(因为我们的工作流程有多个 endpoints/target 规则,我发现将它记录在某个地方很有用)。
进一步挖掘后,我发现 workflow
对象包含一些有用的信息,但是 first_rule
被设置为 None
。我本来希望 属性 被设置为目标规则,但也许我还没有理解它的目的,and/or 不应从 workflow
对象中提取任何信息.
我知道我可以使用 --report
功能获取大量信息 - 我们确实在使用它 - 但希望独立于它。
谢谢!
从更新的问题来看,workflow
似乎很有用。具体来说,一种选择是迭代工作流中的所有规则(参见 snakemake -j 1
好像输出了需要的信息:
rule all:
input:
"a.txt",
"b.txt",
rule a:
output:
"a.txt",
shell:
"""
echo "a" > {output}
"""
rule b:
output:
"b.txt",
default_target: True,
shell:
"""
echo "b" > {output}
"""
print(workflow.default_target)
# will print b
关于 printing
的一个注意事项,如果您正在进行集群提交或您的规则具有对传入数据敏感的 shell 命令,则将信息记录到文件中可能比将信息记录到文件中更好. 打印到标准输出。至少我有一些 non-obvious 错误的经验,这些错误最终可以追溯到我在 Snakefile 中打印。
更新:这是针对边缘情况的 hack,但如果有人对动态修改 default_target
感兴趣,则可以执行如下操作(这只是伪代码,未经测试) :
# assume that config contains the name of the desired target rule
default_target = config["default_target"]
for n, r in enumerate(workflow.rules):
if r.name == default_target:
r.default_target = True