Очень большой ввод и конвейер с использованием subprocess.Popen

У меня довольно простая проблема. У меня есть большой файл, который проходит три этапа: этап декодирования с использованием внешней программы, некоторая обработка в Python, а затем перекодирование с использованием другой внешней программы. Я использовал subprocess.Popen (), чтобы попытаться сделать это в python, а не формировать каналы unix. Однако все данные сохраняются в памяти. Есть ли питонический способ выполнить эту задачу, или мне лучше вернуться к простому скрипту Python, который читает из стандартного ввода и записывает в стандартный вывод с помощью каналов unix с обеих сторон?

import os, sys, subprocess

def main(infile,reflist):
    print infile,reflist
    samtoolsin = subprocess.Popen(["samtools","view",infile],
                                  stdout=subprocess.PIPE,bufsize=1)
    samtoolsout = subprocess.Popen(["samtools","import",reflist,"-",
                                    infile+".tmp"],stdin=subprocess.PIPE,bufsize=1)
    for line in samtoolsin.stdout.read():
        if(line.startswith("@")):
            samtoolsout.stdin.write(line)
        else:
            linesplit = line.split("\t")
            if(linesplit[10]=="*"):
                linesplit[9]="*"
            samtoolsout.stdin.write("\t".join(linesplit))
11
задан Hooked 7 October 2013 в 19:08
поделиться