正如你可以阅读标题,我有兴趣将存储shell命令的结果并将其传递给另一个规则。存储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在不同的地方,我们做samtools的地址,通过CONFIGFILE配置。但是,在这里我不能:
1)读取{SAMTOOLS}的正确值!
2)使整个命令可以运行!
那么,你能否告诉我是否有其他方式存储/传递规则的输出到另一个规则!?更特别的是,我如何增强snakemake来告诉shell {SAMTOOLS}可用。
谢谢!
正如你所建议的使用SAMTOOLS以外的折扣是诀窍!但是,我想知道为什么我以前没有收到这个错误。我正在使用{SAMTOOLS}或其他没有通配符的程序,我的规则都没有抱怨这种用法(即我在这些规则中使用shell)。 – khikho