Redirecting stderr to null and revert
greg
greg at cosc.canterbury.ac.nz
Tue Aug 7 05:42:16 EDT 2007
reubendb wrote:
> def nullStderr():
> sys.stderr.flush()
> err = open('/dev/null', 'a+', 0)
> os.dup2(err.fileno(), sys.stderr.fileno())
>
> def revertStderr():
> sys.stderr = sys.__stderr__
You're doing the redirection at one level and
trying to revert it at a different level.
If this is a Python function that's doing its
output by writing to sys.stderr, there's a
much simpler way to do the redirection:
sys.stderr = open('/dev/null', 'w')
(that's the Python builtin function 'open',
not the one in os). Then your revertStderr
function will work.
BTW I'd arrange for the reversion to be done
in a try-finally, e.g.
nullStderr()
try:
do_something()
finally:
revertStderr()
so you won't get stuck with a redirected stderr
if an exception occurs, and thereby not be able
to see the traceback!
--
Greg
More information about the Python-list
mailing list