新手问题在这里;管道破坏返回
我有以下两个函数 - 第一个,'read_fq_entry',从subprocess.Popen(该系统调用zcat并管道它)读取行,并一次返回四行作为列表。
第二个'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
这可能是不相关的职业blem,但'not name or name =='''是多余的,因为当'name'是空字符串时'not name'的值为True。将它缩短为“if not name:”会有相同的效果。 – Kevin
谢谢Kevin - 好的提示 – user3234810
把'''stream_fq''写成[coroutine](http://wla.berkeley.edu/~cs61a/fa11/lectures/streams.html#coroutines)和''send' ''线路。如果我在我的办公桌上,我会用一个例子回答,希望这会让你走。 – wwii