Decorar \ delegar um objeto File para adicionar funcionalidade

Escrevi um pequeno script Python que executa alguns comandos do shell usando osubprocess módulo e uma função 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)

As seguintes linhas lêem a saída e o erro padrão:

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

Como você pode ver, stdout e stderr não são usados. Suponha que eu queira gravar as mensagens de saída e erro em um arquivo de log, de forma formatada, por exemplo:

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

Minha pergunta é: qual é a maneira mais pitônica de fazer isso? Pensei em três opções:

Herdar o objeto de arquivo e substituir owrite método.Use uma classe Delegate que implementewrite.Conecte-se aoPIPE de alguma maneira.

UPDATE: script de teste de referência

Estou verificando os resultados com este script, salvos comotest.py:

#!/usr/bin/python
import sys

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

Alguma ideia?

questionAnswers(5)

yourAnswerToTheQuestion