sea*_*avi 11 python subprocess popen
我有一个非常简单的问题.我有一个大文件,经过三个步骤,使用外部程序的解码步骤,python中的一些处理,然后使用另一个外部程序重新编码.我一直在使用subprocess.Popen()来尝试在python中执行此操作,而不是形成unix管道.但是,所有数据都缓冲到内存中.是否存在执行此任务的pythonic方法,或者我最好回退到一个简单的python脚本,该脚本从stdin读取并使用unix管道写入stdout?
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))
Run Code Online (Sandbox Code Playgroud)
尝试做出这个小改动,看看效率是否更好.
for line in samtoolsin.stdout:
if(line.startswith("@")):
samtoolsout.stdin.write(line)
else:
linesplit = line.split("\t")
if(linesplit[10]=="*"):
linesplit[9]="*"
samtoolsout.stdin.write("\t".join(linesplit))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19986 次 |
| 最近记录: |