我正在尝试使用fasta文件输入和MuscleCommandline对齐生成树

import sys,os, subprocess
from Bio import AlignIO
from Bio.Align.Applications import MuscleCommandline
cline = MuscleCommandline(input="c:\Python26\opuntia.fasta")
child= subprocess.Popen(str(cline),
                         stdout = subprocess.PIPE,
                         stderr=subprocess.PIPE,
                        shell=(sys.platform!="win32"))
align=AlignIO.read(child.stdout,"fasta")
outfile=open('c:\Python26\opuntia.phy','w')
AlignIO.write([align],outfile,'phylip')
outfile.close()


我总是遇到这些问题

Traceback (most recent call last):
  File "<string>", line 244, in run_nodebug
  File "C:\Python26\muscleIO.py", line 11, in <module>
    align=AlignIO.read(child.stdout,"fasta")
  File "C:\Python26\Lib\site-packages\Bio\AlignIO\__init__.py", line 423, in read
    raise ValueError("No records found in handle")
ValueError: No records found in handle

最佳答案

Biopython 1.54现已发布,带有稳定版本的Bio.Phylo模块。我已经使用生成树的示例管道更新了文档。为简单起见,该示例使用ClustalW而不是Muscle和Phylip来比对序列并生成树,但是大多数代码仍然相同或相似。

http://biopython.org/wiki/Phylo#Example_pipeline

如果您已经用Phylip生成了一棵树(使用.phy对齐作为输入),则仍然可以大致遵循Phylo示例。 Phylip创建一个名称为“ outttree”或“ foo.tree”的Newick文件。

(可以将其与Brad的答案合并;我还不能在该线程中发表评论。)

关于python - 子流程无法捕获标准输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2856697/

10-11 18:12