Pregunta

Estoy tratando de generar el árbol de entrada con FASTA archivo y alineación con 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()

Siempre encuentro con estos problemas

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
¿Fue útil?

Solución

1,54 Biopython fue lanzado hoy con una versión estable del módulo Bio.Phylo. He actualizado la documentación con un ejemplo de generación de tubería para árboles. Por simplicidad, el ejemplo se utiliza ClustalW de secuencias align y generar un árbol, en lugar de músculo y Phylip, pero la mayoría del código sigue siendo el mismo o similar.

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

Si ya ha generado un árbol con Phylip (usando la alineación .phy como entrada), todavía se pueden seguir los ejemplos Phylo en general. Phylip crea un archivo Newick con un nombre como "outttree" o "foo.tree".

(no dude en combinar esto con la respuesta de Brad;. No puedo escribir un comentario en el hilo aún)

Otros consejos

Un par de cosas están dando problemas aquí:

  1. Es necesario un child.wait () después de la llamada subproceso para que el código va a esperar hasta que el programa externo se termina la ejecución.

  2. El músculo no realmente escribir en la salida estándar, a pesar de que la documentación de ayuda dice que lo hace, por lo menos con v3.6 que tengo aquí. Creo que la última es v3.8 por lo que este puede ser fijo.

Biopython le está diciendo que la salida estándar está de paso que está vacío, que es el error que está viendo. Pruebe a ejecutar la línea de comandos directamente:

muscle -in opuntia.fasta

y ver si usted ve la salida FASTA. Aquí está una versión que corrige el problema de la espera y utiliza un archivo de salida intermedia:


import sys,os, subprocess
from Bio import AlignIO
from Bio.Align.Applications import MuscleCommandline
out_file = "opuntia.aln"
cline = MuscleCommandline(input="opuntia.fasta", out=out_file)
child= subprocess.Popen(str(cline),
                         stdout = subprocess.PIPE,
                         stderr=subprocess.PIPE,
                        shell=(sys.platform!="win32"))
child.wait()
with open(out_file) as align_handle:
    align=AlignIO.read(align_handle,"fasta")
outfile=open('opuntia.phy','w')
AlignIO.write([align],outfile,'phylip')
outfile.close()
os.remove(out_file)

A partir de la documentación de la subproccess biblioteca :

  

Warning

     

Uso comunicarse () en lugar de   .stdin.write, o .stdout.read   .stderr.read para evitar puntos muertos debido a   cualquiera de los otros tampones de tubería OS   llenar y bloquear el niño   proceso.

así que tal vez usted podría intentar algo como:

mydata = child.communicate()[0]

Tiene una barra invertida sin protección en su archivo de salida, que no es bueno.

Uso 'r' para obtener cuerdas primas, es decir r'c:\Python26\opuntia.phy'.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top