首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用blast的子进程不会返回所有输出

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

Stack Overflow用户
提问于 2017-11-18 01:13:34
回答 1查看 573关注 0票数 0

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

代码语言:javascript
复制
    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,它什么也不返回,如果我删除该参数,我只得到输出的第一部分:

代码语言:javascript
复制
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上运行这个命令,我会得到完整的输出。

所以,如果我的代码不等到blast完成执行,就会出现这样的情况。

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

代码语言:javascript
复制
 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

此外,当从python运行时,使用blast的输出文件不会在其中写入任何内容,并且shell会输出正确的输出。

EN

回答 1

Stack Overflow用户

发布于 2018-08-23 15:53:32

你想试试这个吗?

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47355979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档