Wie Sie auf dem Titel lesen können, möchte ich das Ergebnis eines Shell-Befehls speichern und an eine andere Regel übergeben.Speichern des Ergebnisses eines Shell-Befehls
Bellow sind meine Regeln:
SAMTOOLS = config["SAMTOOLS"]
rule useDepth:
input:
depth = "{individual}_{chr}.fixmate.sort.rgmdup.bam.depth"
output:
tmpVCF = "{individual}_{chr}.vcf"
run:
depth = storage.fetch("chrDepth")
shell("echo {depth} | exit 1")
rule calDepth:
input:
bam = "{individual}.fixmate.sort.rgmdup.bam"
output:
temp("{individual}_{chr}.fixmate.sort.rgmdup.bam.depth")
run:
import subprocess,shlex
depth=subprocess.check_output(shlex.split("{SAMTOOLS} depth -r {wildcards.chr} {input.bam} | awk '{{sum += $3}} END {{print sum/NR}}'"),shell=True)
storage.store("chrDepth", depth)
shell("echo \"Depth for {wildcards.chr} has been calculated\" > {output[0]}")
Für sicher, ob ich wegen der Ausfahrt 1 einen Fehler hier erhalten! Aber das nur zum Testen.
Der Fehler, den ich zu lösen versuche, ist der Wert von {SAMTOOLS} in subprocess.check_output()!
depth: 1: depth: {SAMTOOLS}: not found
Error in job chrDepth while creating output file
RuleException:
Command '['{SAMTOOLS}', 'depth', '-r', '{wildcards.chr}', '{input.bam}', '|', 'awk', '{{sum += $3}} END {{print sum/NR}}']'
Um informativer zu sein, weil diffrent Benutzer samtools in anderen Ort installieren könnten wir die Adresse von samtools konfigurierbar durch configfile machen. Aber hier kann ich nicht:
1) Lesen Sie den richtigen Wert von {SAMTOOLS}!
2) Machen Sie den gesamten Befehl runnable!
Könnten Sie mir bitte sagen, ob es eine andere Möglichkeit gibt, die Ausgabe einer Regel an eine andere Regel zu übergeben/zu übergeben? Genauer gesagt, wie kann ich snakemake verbessern, um Shell mitzuteilen, dass {SAMTOOLS} verfügbar ist.
Danke!
Wie Sie SAMTOOLS außerhalb von Qutation vorgeschlagen haben, war der Trick! Ich frage mich jedoch, warum ich diesen Fehler nicht früher erhalten habe. Ich habe {SAMTOOLS} oder andere Programme ohne Platzhalter verwendet und keine meiner Regeln beschweren sich über diese Verwendung (d. H. Ich habe die Shell in diesen Regeln verwendet). – khikho