Decorar \ delegar un objeto de archivo para agregar funcionalidad

He estado escribiendo un pequeño script de Python que ejecuta algunos comandos de shell utilizando elsubprocess módulo y una función auxiliar:

import subprocess as sp
def run(command, description):
    """Runs a command in a formatted manner. Returns its return code."""
    start=datetime.datetime.now()
    sys.stderr.write('%-65s' % description)
    s=sp.Popen(command, shell=True, stderr=sp.PIPE, stdout=sp.PIPE)
    out,err=s.communicate()
    end=datetime.datetime.now()
    duration=end-start
    status='Done' if s.returncode==0 else 'Failed'
    print '%s (%d seconds)' % (status, duration.seconds)

Las siguientes líneas leen la salida estándar y el error:

    s=sp.Popen(command, shell=True, stderr=sp.PIPE, stdout=sp.PIPE)
    out,err=s.communicate()

Como puede ver, stdout y stderr no se utilizan. Suponga que quiero escribir la salida y los mensajes de error en un archivo de registro, de forma formateada, por ejemplo:

[STDOUT: 2011-01-17 14:53:55] <message>
[STDERR: 2011-01-17 14:53:56] <message>

Mi pregunta es, ¿cuál es la forma más pitónica de hacerlo? Pensé en tres opciones:

Herede el objeto de archivo y anule elwrite método.Use una clase Delegate que implementewrite.Conéctese aPIPE en sí mismo de alguna manera.

ACTUALIZACIÓN: script de prueba de referencia

Estoy comprobando los resultados con este script, guardado comotest.py:

#!/usr/bin/python
import sys

sys.stdout.write('OUT\n')
sys.stdout.flush()
sys.stderr.write('ERR\n')
sys.stderr.flush()

¿Algunas ideas?

Respuestas a la pregunta(5)

Su respuesta a la pregunta