How to depress the output of an external module ?

fdu.xiaojf at gmail.com fdu.xiaojf at gmail.com
Tue Dec 26 07:39:10 EST 2006


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.


Regards,

xiaojf



More information about the Python-list mailing list