¿Cómo redireccionar stderr a un archivo en Python?

El siguiente código que obtuve de http://forums.devshed.com/python-programming-11/redirect-stdout-stderr-file-500952.html le indica cómo redirigir un stderr a un archivo. Lo intenté, pero el mensaje de error no se guarda en el archivo. Mientras no estoy usando

sys.stderr = file_err 

el error se muestra en el terminal inactivo, cuando estoy asignando file_err a sys.stderr, el error no se muestra en el terminal inactivo y no se está copiando en file_name.log

 import sys original_stderr = sys.stderr file_err = open('file_name.log', 'w') # I tried with .txt also sys.stderr = file_err print(list[file]) # Used to create a NameError sys.stderr = original_stderr file_err.close() 

¿Se supone que debo escribirlo en el archivo o hay un error en el progtwig?

Su código funciona bien (me refiero a: la redirección a stderr.). Sin embargo, tenga en cuenta que desde python3.5 puede usar el contextlib.redirect_stderr de contexto de contextlib.redirect_stderr para hacer esto:

 from contextlib import redirect_stderr with open('filename.log', 'w') as stderr, redirect_stderr(stderr): # errors from here are logged to the file. 

Nota:

  • No tienes que llamar explícitamente a close .
  • No tiene que guardar explícitamente el stderr antiguo y restaurarlo al final.

Por cierto: en lugar de guardar el valor antiguo de stderr , simplemente puede usar sys.__stderr__ .