[SciPy-user] optimize.fmin_tnc - how to catch its output?
Robert Kern
robert.kern at gmail.com
Mon Jul 21 19:22:29 EDT 2008
On Mon, Jul 21, 2008 at 17:56, Stéfan van der Walt <stefan at sun.ac.za> wrote:
> Hi Marek
>
> 2008/7/21 Marek Wojciechowski <mwojc at p.lodz.pl>:
>> Hallo!
>> I tried to catch fmin_tnc output to a file in the following way:
>>
>> file = open('messages', 'w')
>> stdout = sys.stdout
>> stderr = sys.stderr
>> sys.stdout = file
>> sys.stderr = file
>> res = optimize.fmin_tnc(..., messages=1)
>> file.close()
>> sys.stdout = stdout
>> sys.stderr = stderr
>>
>> But this does not work. I realized that fmin_tnc calls C routine which
>> probably uses its own stdout, stderr. Is there a way to catch its output?
>
> I'm afraid you are right. The quickest way I can think of is to grab
> it using standard unix pipes:
>
> python optimise_script.py 2>&1 | cat > out.txt
There is a way to redirect it to a (temporary) file from within
Python. You can then read this file. I have an old and
not-recently-tested implementation over here:
http://www.enthought.com/~rkern/cgi-bin/hgwebdir.cgi/redir/
> Otherwise, the C-code will have to be modified. Does anybody know
> what the best way is to write to sys.stdout and sys.stderr (not printf
> that goes to /dev/stdout) via the Python C API?
PySys_WriteStdout() and PySys_WriteStderr() as long as the output is
coming from the C extension modules themselves. Modifying the
library's C or (hah!) FORTRAN code is less palatable.
--
Robert Kern
"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
-- Umberto Eco
More information about the SciPy-User
mailing list