在 Snakefile 中访问 `--configfile` 的路径

Accessing the path of the `--configfile` within Snakefile

使用 Snakemake,是否有任何方法可以访问使用 --configfile 标志传递给工作流的配置文件的路径?


通过在 source 中寻找 workflow 对象,我最初想到了以下最小 Snakefile

print(str(workflow.configfiles))

会打印一个包含所有配置文件的列表,但是 运行 snakemake --configfile [path/to/config/file] -j 1 只会打印一个空列表(Snakemake 6.1.1)。

Snakemake 是 Python 的一个模块,您可以使用在常规 Python 脚本中使用的所有函数和变量。例如,此代码将打印您指定的命令行参数 运行 Snakemake 脚本:

import sys

print(sys.argv)

基于,针对仅存在一个配置文件的情况的简单解决方案是:

import sys

args = sys.argv
config_path = args[args.index("--configfiles") + 1]
print(config_path)

@MSR 的回答在 运行 在集群上设置工作流时有一个小问题。显然,发送到集群的每个作业(规则)也会运行所有全局代码,但是,它的sys.argv中没有--configfile,这将导致错误时运行宁工作。相反,它有 --configfiles,所以我必须做的是:

if '--configfile' in sys.argv:
    i = sys.argv.index('--configfile')
elif '--configfiles' in sys.argv:
    i = sys.argv.index('--configfiles')
conf_path = sys.argv[i+1]

我不知道这是否是最佳解决方案,但它对我有用。如果 snakemake 有一个更优雅的方式来访问配置路径,那就太好了,比如 workflow.configfile.