正如您在标题中看到的那样,我对存储 shell 命令的结果并将其传递给另一个规则很感兴趣。
下面是我的规则:
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]}")
由于出口 1,我肯定在这里收到了错误!但这只是为了测试。
我要解决的错误是 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}}']'
为了提供更多信息,因为不同的用户可能会在不同的地方安装 samtools,我们通过 configfile 来配置 samtools 的地址。但是,在这里我不能:
1) 读取{SAMTOOLS}的正确值!
2)使整个命令可运行!
那么,您能否告诉我是否有任何其他方法可以将规则的输出存储/传递给另一个规则!?更具体地说,我如何增强蛇形来告诉 shell {SAMTOOLS} 可用。
谢谢!