子进程调用blast不会返回所有输出

时间:2017-11-17 17:13:34

标签: python subprocess popen blast

我正在使用子进程Popen来调用blastn查询。

    cmd_list = ['blastn','-db', sequences_db, '-query','temp_query.fasta','-outfmt','6']
    print(cmd_list)
    blast_process = Popen(cmd_list, stdout=PIPE, stderr=PIPE)
    return_code = blast_process.wait()
    if return_code != 0:
        raise IOError("Blast Error!")
    err = blast_process.stderr.read()
    out = blast_process.stdout.read()
    print(out)
    print(err)
    return out

在shell中运行相同的blastn命令会返回输出。

如果我使用-outfmt 6,它什么都不返回,如果删除那个参数,我只得到了ouptut的第一部分:

A.fsa -query temp_query.fasta
BLASTN 2.2.28+


Reference: Zheng Zhang, Scott Schwartz, Lukas Wagner, and Webb
Miller (2000), "A greedy algorithm for aligning DNA sequences", J
Comput Biol 2000; 7(1-2):203-14.



Database: data/sequences/iwgsc_refseqv1.0_chr1A.fsa
           1 sequences; 594,102,056 total letters

...

但结果却遗失了。同样,如果我在shell上运行此命令,我得到了完整的输出。

所以,如果我的代码不等到最终完成执行,就会有类似的东西。

从shell运行,与python脚本相同的目录:

 blastn -db data/sequences/db/iwgsc_refseqv1.0_chr1A.fsa -query temp_query.fasta -outfmt 6
KR082534_1      chr1A   99.93   1400    1       0       1       1400    591615416       591614017        0.0     2580

另外,使用来自blast的outfile在从python运行时没有任何内容,并且从shell中输出正确的

1 个答案:

答案 0 :(得分:0)

您想尝试这个吗?

cmd_list = ['blastn','-db', sequences_db, '-query','temp_query.fasta','-outfmt','6']
blast_process = Popen(cmd_list, stdout=PIPE, stderr=PIPE)
if return_code != 0:
    raise IOError("Blast Error!")
else:
    out = blast_process.stdout.read()
    for line in iter(out, b''):
        print line.strip()