タイトルを読むと、シェルコマンドの結果を保存し、別のルールに渡すことに興味があります。シェルコマンドの結果を保存する
ベローは私のルールです:私はので、1番出口をここでエラーを受け取ったことを確認するために
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]}")
!しかしそれはテストのためのものです。
私が解決しようとしているエラーは、subprocess.check_output()の{SAMTOOLS}の値です!
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}}']'
切り抜いたユーザーたちはconfigfileを介して構成samtoolsのアドレスを作る別の場所にsamtoolsをインストールする可能性があるため、より有益なことができます。しかし、ここで私はできません:
1){SAMTOOLS}の正しい値をお読みください!
2)コマンド全体を実行可能にしてください!
他の方法でルールの出力を保存/別のルールに渡すことができますか教えてください。より具体的には、{SAMTOOLS}が利用可能であることをシェルに伝えるためにsnakemakeをどのように強化できますか?
ありがとうございます!
あなたはqutationの外でSAMTOOLSを使うことを提案したので、トリックでした!しかし、なぜ私はこのエラーを以前に受けていないのだろうと思っています。私は{SAMTOOLS}やその他のプログラムをワイルドカードなしで使用していましたが、私の規則のどれもがこの使用法について不平を言っていませんでした。 – khikho