我正在使用子进程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中输出正确的
答案 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()