Redirecting standard out in a single namespace

Fuzzyman fuzzyman at gmail.com
Tue Jan 24 06:40:58 EST 2006


Bengt Richter wrote:
[snip..]
> >The following in the write method of the custom out object works :
> >
> >    sys._getframe(1).f_globals['__name__']
> >
> >sys.stdout.write is *always* called from at least one frame deep in the
> >stack - so it works.
> Yes, that's about what I had in mind, not being able to think of an alternative
> (other than the obvious one of using something other than print in the module
> where you want to redirect, either by hand or by effective source rewrite one way
> or another to translate print statments into e.g. myprint('the', 'print', 'args') or such.
> You could do source preprocessing or translating at the AST level, or you could do byte code munging.
> Nothing too nice.
>
> >
> >However the Python docs say of sys._getframe :
> >
> >    This function should be used for internal and specialized purposes
> >only.
> >
> >Might this approach be brittle ?
> >
> In what sense? I guess it ought to work for the version it's defined for, but the advice is there.
> Maybe we can get something more specific from the author of the above doc snippet ;-)
>

``inspect.currentframe`` has no such warning. The equivalent would then
be :

    inspect.currentframe().f_back.f_globals['__name__']

I guess unless the implementation of Python changes that will continue
to work. :-)

Thanks

Fuzzyman
http://www.voidspace.org.uk/python/index.shtml

> Regards,
> Bengt Richter




More information about the Python-list mailing list