在 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
.
使用 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
.