<p>似乎是<a href="https://snakemake.readthedocs.io/en/stable/snakefiles/rules.html#data-dependent-conditional-execution" rel="nofollow noreferrer">checkpoints</a>的用法。对于检查点,DAG将在检查点执行后重新评估。你可以这样做:</p>
<pre><code>from glob import glob
def get_ref_index(wildcards):
"""Returns the reference index for wildcards"""
checkpoints.bowtie2_build.get() # Checks to see if the checkpoint rule has been run, might be an issue without wildcards
suffix=[".1.bt2", ".2.bt2", ".3.bt2", ".4.bt2", ".rev.1.bt2", ".rev.2.bt2", ".1.bt21", ".2.bt21", ".3.bt21", ".4.bt21", ".rev.1.bt21", ".rev.2.bt21"]
ref_files = glob.glob("reference/" + config["reference_genome"] + "*") # List files with reference genome pattern
for ref in ref_files:
suffix = ref.split(".", 1)[1] # Split on first period to grab all suffixes
if suffix in suffixes:
return ref
checkpoint bowtie2_build:
input:
"reference/"+config["reference_genome"]+".fa"
output:
touch("reference/"+config["reference_genome"]+".done") # Breadcrumb file to link to downstream rules, since we don't know what indexes we'll get
params:
output_prefix=config["reference_genome"]
shell:
"bowtie2-build {input} reference/{params.output_prefix}"
rule donwstream_rule:
input:
ref = "reference/"+config["reference_genome"]+".fa"
ref_index = get_ref_index
ref_index_done = "reference/"+config["reference_genome"]+".done"
output:
foo = "bar"
shell:
"touch bar"
</code></pre>