Question: No output in local blast using biopython
0
gravatar for sven.lemoinebauer
3.0 years ago by
European Union
sven.lemoinebauer10 wrote:

Hi everybody,

I know a similar question has been put here before but it did not answer my problem. I divide it in two parts:

1)

I want to run a local blast on a multifasta file. I have blast installed as well as the nucleotide database. Being in my database directory, I run:

blastn -db nt -query rep.fna -out plop1.xml -outfmt 5

for this everything works well, I get an plop1.xml file out (with something in it). However I tried to run the same thing in python (still being in the same directory):

>>> from Bio.Blast.Applications import NcbiblastnCommandline
>>> cline = NcbiblastnCommandline(query= "rep.fna", db = "nt", out= "plop.xml", outfmt = 5)
>>> cline
NcbiblastnCommandline(cmd='blastn', out='plop.xml', outfmt=5, query='rep.fna', db='nt')
>>> print cline
blastn -out plop.xml -outfmt 5 -query rep.fna -db nt
>>> stdout, stderr = cline
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'NcbiblastnCommandline' object is not iterable

In this case I do not get anything out, no plop.xml is created. What is wrong? Can also somebody explain me what are the stdout and stderr? I do not understand.

2)

Originally, I wanted it to be part of a whole python script where I process my sequences. So, from another directory than the database (I created also a .ncbirc file in my home directory):

dictionary_matches = {}
from Bio.Blast.Applications import NcbiblastnCommandline
blastn_cline = NcbiblastnCommandline(query = "rep.fna", db = "nt", outfmt = 5, out = "my_blast.xml")
stdout, stderr = blastn_cline()
blast_records = NCBIXML.parse(open("my_blast.xml"))    
for record in blast_records:
    for index, alignment in enumerate(record.alignments):
        if index == 0:
            print alignment.title
            dictionary_matches[str(record.query)] = str(alignment.title)

Result is:

Traceback (most recent call last):
  File "blast_oturep.py", line 27, in <module>
    stdout, stderr = blastn_cline()
  File "/Library/Python/2.7/site-packages/Bio/Application/__init__.py", line 444, in __call__
    stdout_str, stderr_str)
Bio.Application.ApplicationError: Command 'blastn -out my_blast.xml -outfmt 5 -query rep.fna -db nt' returned non-zero exit status 255, 'Critical: (110.6) CNcbiRegistry: Syntax error in system-wide configuration file: NCBI C++ Exception:'

And no output is created.

If I would try the same thing and remove the stdout, stderr line, I would get an empty xml file as an output, and then of course the iteration does not work.

For this last part, it seems that my .ncbirc file is the problem, cause after making it, I cannot run anymore a simple local blast outside of python like in 1), I then get something like that:

Critical: (110.6) CNcbiRegistry: Syntax error in system-wide configuration file: NCBI C++ Exception:
    T0 "/Users/coremake/release_build/build/PrepareRelease_IntelMAC_JSID_01_80346_130.14.18.6_9008__PrepareRelease_IntelMAC_1433256305/c++/compilers/unix/../../src/corelib/ncbireg.cpp", line 675: Error: ncbi::IRWRegistry::x_Read() - Invalid registry entry format: '{\rtf1\ansi\ansicpg1252\cocoartf1347\cocoasubrtf570' (m_Pos = 1)

Error: NCBI C++ Exception:
    T0 "/Users/coremake/release_build/build/PrepareRelease_IntelMAC_JSID_01_80346_130.14.18.6_9008__PrepareRelease_IntelMAC_1433256305/c++/compilers/unix/../../src/corelib/ncbireg.cpp", line 675: Error: ncbi::IRWRegistry::x_Read() - Invalid registry entry format: '{\rtf1\ansi\ansicpg1252\cocoartf1347\cocoasubrtf570' (m_Pos = 1)

However, I do not undersatnd what is wrong with my file, I followed the online instructions:

; Where the databases are:
BLASTDB=/Users/svenlemoinebauer/Documents/blast_database
; end of the file

 

I am really lost. Any idea?

Thanks a lot. :)

myposts blast biopython python • 1.8k views
ADD COMMENTlink modified 3.0 years ago by Peter5.7k • written 3.0 years ago by sven.lemoinebauer10

You've got two main questions here, perhaps remove the .ncbirc bit and make that into a separate question?

ADD REPLYlink written 3.0 years ago by Peter5.7k
2
gravatar for Peter
3.0 years ago by
Peter5.7k
Scotland, UK
Peter5.7k wrote:

You did this:

>>> stdout, stderr = cline
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'NcbiblastnCommandline' object is not iterable

You need to do this with the empty brackets indicating using it as a function without any explicit arguments:

>>> stdout, stderr = cline()

 

ADD COMMENTlink modified 3.0 years ago • written 3.0 years ago by Peter5.7k
Please log in to add an answer.

Help
Access

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.
Powered by Biostar version 2.3.0
Traffic: 1751 users visited in the last hour