unexpected from/import statement behaviour

nisp emanuele.nespolo at gmail.com
Wed Aug 27 15:11:20 CEST 2008


On Aug 27, 2:43 pm, "Diez B. Roggisch" <de... at nospam.web.de> wrote:
> nisp wrote:
> > On Aug 27, 9:56 am, Peter Otten <__pete... at web.de> wrote:
> >> nisp wrote:
> >> > Hi all !
>
> >> > I'm trying to capture stderr of an external module I use in my python
> >> > program. I'm doing this
> >> > by setting up a class in my module overwriting the stderr file object
> >> > method write.
> >> > The external module outputs to stderr this way:
>
> >> > from sys import std err
>
> >> > ....
>
> >> > print >> stderr, "Some text"
>
> >> > While in my module I use
>
> >> > import sys
>
> >> > ..... sys.stderr ... sys.stdout
>
> >> > Well, as long as I do not change in the external module those from/
> >> > import statements to just
>
> >> > import sys
>
> >> > ....
>
> >> > print >> sys.stderr, "Some text"
>
> >> > I'm not able to capture its stderr and of course I would like not to
> >> > do this kind of change.
> >> > I've always been convinced of the equivalence of the two ways of using
> >> > the import statement
> >> > but it's clear I'm wrong :-(
>
> >> > Please, someone can tell me what's going on ?
>
> >> > Thanks in advance !
>
> >> A practical approach to complement Diez' link to the explanation:
>
> >> Instead of modifying the external module you can either redirect stderr
> >> before you import the external module
>
> >> import sys
> >> sys.stderr = whatever
> >> import external
>
> >> or monkey-patch:
>
> >> import sys
> >> import external
>
> >> sys.stderr = external.sterr = whatever
>
> >> Peter
>
> > Hi all !
>
> > Thanks first of all ! I read the interesting Diez's link but something
> > still remains to me unclear, on the other hand it's clear the my
> > problem is concentrated there and on symbols.
> > Here is what I'm trying to do
>
> > HelloWorld.py: this is a real simplification of my external module
> > though still reflecting its structure (commented out is the version
> > that, let's say, works)
>
> > from sys import stderr
>
> This is your problem. You create a HelloWorld.stderr-alias to the object
> bound to sys.stderr. Rebinding the latter won't affect the former. That is
> precisely what the link I gave you explains.
>
> The short answer to the whole issue is: dont' use the from-import syntax
> until you really know what you are doing. Or not at all.
>
> Diez

Hi Diez! I well understand the problem now, the fact is that
unfortunately the external module is not mine and i doubt i can change
it :-( Anyway as far as i'm concerned i've learned the lesson ! Thanks
again and greetings,
Nisp



More information about the Python-list mailing list