[Biopython-dev] Problems with Bio.Application.generic_run()
Steffi Gebauer-Jung
gebauer-jung at ice.mpg.de
Thu Jun 19 09:38:09 EDT 2003
Hello,
using the Bio.Application package, I got some trouble.
When using generic_run() to run blast, which in this case produced a
*very* large output and several warnings, the blast process fell asleep.
Running this blast as standalone, there were no problems.
Looking around in the Python Reference etc. I found that there is
possibly a dead lock of the parent and child processes.
For now I solved this problem using a recipe from the Python Cookbook as
follows:
-------------------------------------------------------------------------------------------
def generic_run(commandline):
"""Run an application with the given commandline.
This expects a pre-built commandline that derives from
AbstractCommandline, and returns a ApplicationResult object
to get results from a program, along with handles of the
standard output and standard error.
This is a deadlock save version.
It was derived from
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52296
Comment: Differnet Approach: Using Tempfiles, Tobias Polzin, 2002/09/03
"""
outfile = tempfile.mktemp()
errfile = tempfile.mktemp()
errorlevel = os.system("( %s ) > %s 2> %s" %
(str(commandline),outfile,errfile)) >> 8
r_out = open(outfile,"r").read()
os.remove(outfile)
e_out = open(errfile,"r").read()
os.remove(errfile)
return ApplicationResult(commandline), \
File.UndoHandle(StringIO.StringIO(r_out)), \
File.UndoHandle(StringIO.StringIO(e_out))
-------------------------------------------------------------------------------------------
Please could you have a look at this quite central method or tell me a
more save one to use instead?
Thanks in advance,
Steffi Gebauer-Jung
More information about the Biopython-dev
mailing list