{
samtools view -HS header.sam; # command1
samtools view input.bam 1:1-50000000; # command2
} | samtools view -bS - > output.bam # command3
对于那些不熟悉samtools view的人(因为这是stackoverflow)。本质上,这是创建具有新标题的新bam文件。bam文件通常是大型压缩文件,因此即使在某些情况下通过文件进行传递也可能耗时。一种替代方法是执行command2,然后使用samtools reheader切换标题。这将两次经过大文件。上述命令只经过一次bam,适用于更大的bam文件(它们即使在压缩后也可能达到20GB以上-WGS)。
我的问题是如何使用subprocess在Python中实现这种类型的命令。
我有以下内容:
fh_bam = open('output.bam', 'w')
params_0 = [ "samtools", "view", "-HS", "header.sam" ]
params_1 = [ "samtools", "view", "input.bam", "1:1-50000000"]
params_2 = [ "samtools", "view", "-bS", "-" ]
sub_0 = subprocess.Popen(params_0, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
sub_1 = subprocess.Popen(params_1, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
### SOMEHOW APPEND sub_1.stdout to sub_0.stdout
sub_2 = subprocess.Popen(params_2, stdin=appended.stdout, stdout=fh_bam)
非常感激您的帮助。谢谢。
fh_bam
是什么?为什么不直接从两者的输出中获取并在最后一个进程的命令中使用它? - Padraic Cunningham