2017-08-31 63 views
2

當這是在管道早些時候發表的一項文件被刪除,SnakeMake似乎並不認爲這是一個問題,只要以後文件有:可以SnakeMake被迫重新規則,當文件丟失

rule All: 
    input: "testC1.txt", "testC2.txt" 

rule A: 
    input: "{X}{Y}.txt" 
    output: "{X}A{Y}.txt" 
    shell: "cp {input} {output}" 

rule B: 
    input: "{X}A{Y}.txt" 
    output: "{X}B{Y}.txt" 
    shell: "cp {input} {output}" 

rule C: 
    input: "{X}B{Y}.txt" 
    output: "{X}C{Y}.txt" 
    shell: "cp {input} {output}" 

保存此SnakeFile在test.sf和做到這一點:

rm testA*.txt testB*.txt testC*.txt 
echo "test1" >test1.txt 
echo "test2" >test2.txt 
snakemake -s test.sf 
# Rerun: 
snakemake -s test.sf 
# SnakeMake says all is up to date, which it is. 
# Remove intermediate results: 
rm testA1.txt 
# Rerun: 
snakemake -s test.sf 

SnakeMake說都是最新的。它沒有檢測到缺少testA1.txt。

我似乎回想起在線SnakeMake手冊中有關此事的一些內容,但我無法再找到它。

我認爲這是預期的SnakeMake行爲。它有時可能是需要的行爲,但有時您可能希望它檢測並重建丟失的文件。如何才能做到這一點?

+1

我認爲這確實是Snakemake的預期行爲。如果您確實需要testA1.txt,我建議您將其添加到您的規則中。所有 – rioualen

+0

將所有可能保留的規則中的所有可能的中間文件添加到All規則是不切實際的。 Snakemake應該以不同的方式工作,它需要一種方法來提供這種情況。 – tedtoal

回答

0

前一段時間,我發現這個thread關於--forcerun/-R參數可能是有用的。

最終,如果您想重新生成該中間文件而沒有單獨的規則或將其作爲目標包含在其中,則snakemake將強制執行整個管道。