假设我从 shell 运行了以下命令
{
samtools view -HS header.sam; # command1
samtools view input.bam 1:1-50000000; # command2
} | samtools view -bS - > output.bam # command3
对于那些不熟悉 samtools 视图的人(因为这是 stackoverflow)。这本质上是在创建一个具有新标头的新 bam 文件。bam 文件通常是大型压缩文件,因此在某些情况下,即使通过文件也可能很耗时。另一种方法是执行 command2,然后使用 samtools reheader 切换标题。这会通过大文件两次。上述命令通过 bam 一次,这对于较大的 bam 文件很有用(即使压缩后它们也会大于 20GB - WGS)。
我的问题是如何使用子进程在 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)
任何帮助是极大的赞赏。谢谢。