How to capture stdout in an exec'ed string?
Jeff
jam at quark.emich.edu
Wed Nov 24 07:32:34 EST 1999
On Wed, Nov 17, 1999 at 09:44:11PM +0000, Preston Landers wrote:
> Hello all.
[..snipped..]
>
> At no time do I want the old program's output to be visible to the
> user. Therefore I must find some way trap the print statements.
> (Going through the old code and changing all the prints to a custom
> function call is not really an option at this point.)
>
> In the subject line of this msg I said an "exec'ed statement" but it
> not really need be. I can just instantiate the old program and call
> the methods I need. Something like this:
>
> try:
> cruft = my_ancient_class()
> cruft.__stdout__ == My_STDOUT()
> cruft.do_your_thang()
> except SystemExit, msg:
> process(msg)
>
> I guess my question is how to accomplish the 3rd line of my code. What
> kind of class does My_STDOUT() need to be? Something mimicing a file
> handle? How to actually "attach" it? My guess is that I will have to
> eval my_ancient_class in a special namespace?
>
how about just calling 'open' and assigning it to 'sys.stdout'? your
assumption is correct-- stdout is nothing more than a standard file handle
(under UNIX anyway).
you could try something like this (untested):
sys.stdout = open("/dev/null", "w")
cruft = my_ancient_class()
try:
cruft.do_your_thang()
except SystemExit, msg:
process(msg)
you may also want to keep track of the 'old' stdout file handle so it can be
restored later.
hope that helps.
regards,
J
--
|| visit gfd <http://quark.emich.edu/>
|| psa member #293 <http://www.python.org/>
|| New Image Systems & Services, Inc. <http://www.newimage.com/>
More information about the Python-list
mailing list