[BioPython] BLAST subprocess problem with a GUI
Peter
biopython at maubp.freeserve.co.uk
Wed Jan 28 17:45:25 UTC 2009
On Tue, Jan 13, 2009 at 10:41 AM, Peter <biopython at maubp.freeserve.co.uk> wrote:
> On Tue, Jan 13, 2009 at 7:38 AM, Stefanie Lück <lueck at ipk-gatersleben.de> wrote:
>> I was a little bit to optimistic...
>>
>> After compilation with py2exe, blast hangs. In the log file of py2exe
>> I get the following error message:
>>
>> Traceback (most recent call last):
>> File "prim_search.pyc", line 464, in make_xml
>>
>> File "Bio\Blast\NCBIStandalone.pyc", line 1668, in blastall
>> File "Bio\Blast\NCBIStandalone.pyc", line 1992, in _invoke_blast
>> File "subprocess.pyc", line 586, in __init__
>> File "subprocess.pyc", line 681, in _get_handles
>> File "subprocess.pyc", line 722, in _make_inheritable
>> TypeError: an integer is required
>>
>> Any ideas?
>> Stefanie
>
> Are you using Biopython 1.49?
>
> What version of Python are you using here? (Python 2.3 is handled a
> little differently, as it does not have the subprocess module).
>
> Can you confirm the exact same code works fine run from Python
> directly (via IDLE or the commandline?), but fails via py2exe?
>
> Are you running the py2exe compiled version from the Windows command
> line? Can you try that, even thought you said it was a GUI program.
> This might be related to the following python bug on Windows to do
> with pipe redirection, http://bugs.python.org/issue1124861
> If so, I think there is a suggested work around we can try (this will
> require a change to the Biopython code).
>
> Peter
Hi Stefanie,
Did you make any progress with this problem? If as I suspect the
problem is the python subprocess bug
http://bugs.python.org/issue1124861 then you can try the suggested
work around in Biopython, by modifying the _invoke_blast function in
Bio\Blast\NCBIStandalone.py file as follows:
import subprocess, sys
#We don't need to supply any piped input, but we setup the
#pipe anyway as a work around for a python bug if this is
#called from a Windows GUI program. For details, see:
#http://bugs.python.org/issue1124861
blast_process = subprocess.Popen(cmd_string,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=(sys.platform!="win32"))
blast_process.stdin.close()
return blast_process.stdout, blast_process.stderr
I've checked this change doesn't seem to break anything - but does it
help for your GUI program?
Peter
More information about the Biopython
mailing list