シェルから次のコマンドを実行したとしましょう
{
samtools view -HS header.sam; # command1
samtools view input.bam 1:1-50000000; # command2
} | samtools view -bS - > output.bam # command3
samtools ビューに慣れていない方向け (これは stackoverflow であるため)。これが本質的に行っていることは、新しいヘッダーを持つ新しいbamファイルを作成することです. 通常、bam ファイルは大きな圧縮ファイルであるため、場合によってはファイルを通過するだけでも時間がかかることがあります。別の方法の 1 つは、command2 を実行してから、samtools reheader を使用してヘッダーを切り替えることです。これは、大きなファイルを 2 回通過します。上記のコマンドは、bam を 1 回通過します。これは、大きな 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)
どんな助けでも大歓迎です。ありがとう。