管道破裂返回

时间:2015-07-20 13:14:51

标签: python python-2.7

新手提问;

我有以下两个函数 - 第一个,' 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

1 个答案:

答案 0 :(得分:1)

return [name, seq, strand, qual]位于while True:循环内。您应该将其向上移动一级, 可能会将return语句更改为yield语句。