How to depress the output of an external module ?
André
andre.roberge at gmail.com
Tue Dec 26 07:55:46 EST 2006
fdu.xiaojf at gmail.com wrote:
> Steven D'Aprano wrote:
> > Try something like this:
> >
> > # WARNING: untested
> > def run_without_stdout(*args, **kwargs):
> > function = args[0]
> > args = args[1:]
> > savestdout = sys.stdout
> > sys.stdout = cStringIO.StringIO()
> > result = None
> > try:
> > result = function(*args, **kwargs)
> > finally:
> > # don't forget to restore stdout, or you
> > # really will regret it...
> > sys.stdout = savestdout
> > return result
> >
> Thanks!
>
> I have tried your method, but I found it didn't work as expected.
>
> The output produced by the external function couldn't be depressed,
> but the "print " statement i wrote in python is depressed. It seems
> make cStringIO.StringIO() as a temporary replacement of sys.stdout
> has no effect on the external function.
>
> Here is an example to make myself clear(actually it's modified version
> of Steven's code):
>
> def run_without_stdout(*args, **kwargs):
> function = args[0]
> args = args[1:]
> savestdout = sys.stdout
> sys.stdout = cStringIO.StringIO()
> print "something"
> result = None
> try:
> result = function(*args, **kwargs)
> finally:
> # don't forget to restore stdout, or you
> # really will regret it...
> sys.stdout = savestdout
> print "some other thing"
> return result
>
> When run_without_stdout() is called, the "print" statements wrote in python
> don't produce output, but function() produces output to the standard output
> just as before:(
>
> I have tried to replace sys.stdout globally with cStringIO.StringIO()
> in my program(I mean, make "sys.stdout = cStringIO.StringIO()" as a
> globall statement), but it worked just as previous version did.
Perhaps try redirecting sys.stderr instead of sys.stdout.
André
>
> Regards,
>
> xiaojf
More information about the Python-list
mailing list