Python 带回流的管道破裂
新手问题在这里 我有以下两个函数——第一个“read_fq_entry”,从subprocess.Popen(系统调用zcat并对其进行管道处理)读取行,并以列表的形式一次返回四行 第二个“stream_fq”从第一个获取返回的输出,并暂时打印它。(最终,我将随机抽取一组行并将它们写入文件 问题是,第一个函数中的返回破坏了管道-知道如何不这样做吗Python 带回流的管道破裂,python,python-2.7,Python,Python 2.7,新手问题在这里 我有以下两个函数——第一个“read_fq_entry”,从subprocess.Popen(系统调用zcat并对其进行管道处理)读取行,并以列表的形式一次返回四行 第二个“stream_fq”从第一个获取返回的输出,并暂时打印它。(最终,我将随机抽取一组行并将它们写入文件 问题是,第一个函数中的返回破坏了管道-知道如何不这样做吗 def read_fq_entry( process ): while ( True ): name
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
行
返回[name,seq,strand,qual]
在循环中,而True:
循环。您应该将其上移一级,或者也许可以将return
语句改为yield
语句。这没有帮助。OP需要一个生成器,但这是一个主要的重写。Define generator-可以在需要时重写,寻找最佳的解决方案ons。这可能与您的问题无关,但not name或name==''
是多余的,因为not name
在name
为空字符串时计算结果为True。如果不是name:将其缩短为,则会产生相同的效果。感谢Kevin-优秀的tipWritestream_fq
和send
行如果我在我的办公桌上,我会举个例子来回答,希望这能帮助你。