【发布时间】:2021-06-07 21:43:27
【问题描述】:
当您使用 --restart-times >= 1 执行蛇形脚本时,它将尝试重新执行失败的运行。重新执行时,可以通过“资源”中的 lambda 函数访问执行尝试的次数。但是,我想在我的规则之外访问 python 代码块中的尝试次数。我试图将尝试变量从资源块传递给我的 python 函数,但无济于事。我的 snakemake 版本是 5.32.1,与 6.0.3 的快速测试看起来非常相似。
def getTargetFiles(files, attempted):
do stuff
return modified-target-files
rule do_things_rule:
input:
...
output:
getTargetFiles("file/path.txt", resources.attempt)
resources:
attempt=lambda wildcards, attempt: attempt,
不幸的是,这会产生错误。 "xxxx.py 第 172 行的 NameError: name 'resources' is not defined"
我最接近的是访问“workflow.attempt”,但这似乎总是设置为 1。也许这是尝试的默认值?
rule do_things_rule:
input:
...
output:
getTargetFiles("file/path.txt", workflow.attempt)
我正在查看snakemake 的内部结构,希望能找到解决方案。不幸的是,我的 python 知识不能胜任这项任务。可以访问一些变量来代替 workflow.attempt,它们没有整数值。不确定是否有一种方法可以通过稍微不同的方式获得当前的尝试次数:
print snakemake.jobs.Job.attempt
<property object at 0x7f4eecba66d0>
print snakemake.jobs.Job._attempt
<member '_attempt' of 'Job' objects>
【问题讨论】:
-
您能否发布一个可重现的最小示例来说明您正在尝试做什么?