У меня довольно простая проблема. У меня есть большой файл, который проходит три этапа: этап декодирования с использованием внешней программы, некоторая обработка в 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))