在 Snakefile 中访问 --default-remote-prefix
Accessing the --default-remote-prefix within the Snakefile
当我在 google 生命科学执行器上 运行 snakemake 时,我 运行 类似于:
snakemake --google-lifesciences --default-remote-prefix my_bucket_name --preemption-default 10 --use-conda
现在,my_bucket_name
将添加到所有输入和输出路径。
但是由于 原因 我需要在 Snakefile 代码中重新创建完整路径,因此我希望能够访问代码中传递给 --default-remote-prefix
的任何内容
有办法吗?
I want to be able to access whatever is passed to --default-remote-prefix within the code
您可以像这样使用 workflow 对象:
print(workflow.default_remote_prefix) # Will print my_bucket_name in your example
rule all:
input: ...
我不是 100% 确定 workflow
对象是否应该由用户使用,或者它是否是 snakemake 私有的,如果是这样的话,它可能会在未来没有警告的情况下被更改。不过我觉得还可以,我一直用workflow.basedir
来获取Snakefile所在的目录。
或者您可以解析 sys.argv
列表,但我认为这更 hacky。
另一种选择:
bucket_name=foo
snakemake --default-remote-prefix $bucket_name --config bucket_name=$bucket_name ...
然后在代码中使用 config["bucket_name"]
来获取值 foo
。但我还是更喜欢 workflow
解决方案。
当我在 google 生命科学执行器上 运行 snakemake 时,我 运行 类似于:
snakemake --google-lifesciences --default-remote-prefix my_bucket_name --preemption-default 10 --use-conda
现在,my_bucket_name
将添加到所有输入和输出路径。
但是由于 原因 我需要在 Snakefile 代码中重新创建完整路径,因此我希望能够访问代码中传递给 --default-remote-prefix
的任何内容
有办法吗?
I want to be able to access whatever is passed to --default-remote-prefix within the code
您可以像这样使用 workflow 对象:
print(workflow.default_remote_prefix) # Will print my_bucket_name in your example
rule all:
input: ...
我不是 100% 确定 workflow
对象是否应该由用户使用,或者它是否是 snakemake 私有的,如果是这样的话,它可能会在未来没有警告的情况下被更改。不过我觉得还可以,我一直用workflow.basedir
来获取Snakefile所在的目录。
或者您可以解析 sys.argv
列表,但我认为这更 hacky。
另一种选择:
bucket_name=foo
snakemake --default-remote-prefix $bucket_name --config bucket_name=$bucket_name ...
然后在代码中使用 config["bucket_name"]
来获取值 foo
。但我还是更喜欢 workflow
解决方案。