новичок вопрос здесь;Нарушение трубы с возвратом
У меня есть две следующие функции: первая, «read_fq_entry», считывает строки из подпроцесса. 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 == ''' является избыточным, потому что 'not name' оценивается как True, когда' name' является пустой строкой. Сокращение его до 'if not name:' будет иметь тот же эффект. – Kevin
Спасибо Kevin - хороший совет – user3234810
Напишите '' 'stream_fq''' в качестве [coroutine] (http://wla.berkeley.edu/~cs61a/fa11/lectures/streams.html#coroutines) и' '' send' '' строк к нему. Если бы я был за моим столом, я бы ответил на пример, надеюсь, это вас уволит. – wwii