避免重複的文字。除非將輸入/輸出轉換爲通配符+擴展,否則不要使用參數。否則,你會留下難以維護的規則。
input:
"{pathDIR}/{genome}.txt"
output:
"{pathDIR}/{genome}.msh"
params:
dir: '{pathDIR}/{genome}'
否則,use Python's slice notation。
我似乎無法使用輸出通配符在參數中使用切片符號。它在運行指令中。
from subprocess import call
rule sketch:
input:
'out/genomes.txt'
output:
'out/genomes.msh'
run:
callString="mash sketch -l " + str(input) + " -k 31 -s 100000 -o " + str(output)[:-4]
print(callString)
call(callString, shell=True)
Python是Snakemake的基礎。我更喜歡通過「shell」指令的「run」指令,因爲我發現它真正解開了許多美麗的Python功能。 params和各種東西的訪問與「shell」指令略有不同。
E.g.
callString=config["mpileup_samtoolsProg"] + ' view -bh -F ' + str(config["bitFlag"]) + ' ' + str(input.inputBAM) + ' ' + wildcards.chrB2M[1:]
A bit of a snippet of J.K. using the run directive.
All of the rules in my modules pretty much use the run directive
這是迄今爲止最優雅的解決方案,儘管原則上可以對輸入/輸出執行非常基本的操作。傷心! – mgalardini