我使用子进程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,它什么也不返回,如果我删除该参数,我只得到输出的第一部分:
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脚本相同的目录:
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会输出正确的输出。
发布于 2018-08-23 15:53:32
你想试试这个吗?
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()https://stackoverflow.com/questions/47355979
复制相似问题