新手提问;
我有以下两个函数 - 第一个,' read_fq_entry',从subprocess.Popen(系统调用zcat并管道它)读取行,并一次返回四行作为列表。 / p>
第二个' stream_fq'从第一个输出返回的输出,并暂时打印它。 (最终我会抽取随机的行集并将它们写入文件。
问题是第一个函数的返回打破了管道 - 关于如何不执行此操作的任何想法?
def read_fq_entry( process ):
while ( True ):
name = process.stdout.readline()
seq = process.stdout.readline()
strand = process.stdout.readline()
qual = process.stdout.readline()
if ( not name or name == '') :
return []
return [name, seq, strand, qual]
def stream_fq(infile1, infile2, Nr_of_reads):
proc1 = subprocess.Popen("zcat " + infile1, stdout=subprocess.PIPE, shell=True)
proc2 = subprocess.Popen("zcat " + infile2, stdout=subprocess.PIPE, shell=True)
while ( True ):
fq_1_entry = read_fq_entry(proc1)
fq_2_entry = read_fq_entry(proc2)
print fq_1_entry
print fq_2_entry
答案 0 :(得分:1)
行return [name, seq, strand, qual]
位于while True:
循环内。您应该将其向上移动一级, 或 可能会将return
语句更改为yield
语句。