[Python-es] Cómo filtrar/procesar la salida a consola de una función, sin modificar la función

Daniel Garcia Moreno dani en danigm.net
Dom Feb 21 23:20:26 CET 2010


El dom, 21-02-2010 a las 22:39 +0100, Eduardo Ferro escribió:
> Buenas.
> 
> Necesito poder filtrar la salida por consola de una función a la que
> llamo, sin que esta función se vea alterada. Es para una especie de
> interprete de comandos, que puede tener en un momento dado activados
> filtros  o no, o tener activado un pager o no. 
> Para que se me entienda bien, si tengo la siguiente función:
> 
> def func1():
>     for num in range(100):
>         print num
> 
> Cuando ejecute la función saldrian las 100 lineas numeradas, pero si
> la llamo y tengo configurado un paginador, quisiera que se parase cada
> 25 lineas y esperase una tecla, o si tengo puesto un filtro para que
> salgan las lineas que contengan un "1", sólo quiero que salgan esas
> lineas....
> 
> Ahora mismo lo tengo hecho con un objeto que simula ser un fichero de
> salida y que hace las funciones de filtro, y lo que hago es cambiar el
> sys.stdout por ese objeto, antes de realizar la llamada, y restaurarlo
> una vez completada la llamada. Algo similar a:
> 
> inicial = sys.stdout
> sys.stdout = FiltroSalida()
> func1()
> sys.stdout = inicial
> 
> El caso es que estoy teniendo algunos problemas con la implementación
> de  la clase FiltroSalida y en algunos casos creo que pierdo algo de
> la salida...

También tienes que tener en cuenta la salida de error, sys.stderr. Lo
mismo lo que se te escapa es eso.

------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: Esta parte del mensaje está firmada digitalmente
URL: <http://mail.python.org/pipermail/python-es/attachments/20100221/da83f0b5/attachment.pgp>


Más información sobre la lista de distribución Python-es