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

Soto scots4ever en gmail.com
Lun Feb 22 00:04:39 CET 2010


Buenas.
A ver, dices que no quieres que tu función se vea afectada.
Si pudieras cambiar esos arcaicos print por algo más currado quizás podrías
arreglarlo. No sé cuál tu intención pero existe el módulo
logging<http://docs.python.org/library/logging.html>  con
el cual puedes crear diferentes manejadores que te permiten establecer
algunos parametros. Jugando con eso puedes establecer a partir de que nivel
de error dentro de los que permite dicha librería sea el que se visualice
por pantalla.

Espero que te sea de ayuda.

__________________________________________________________
Cualquier idiota puede escribir código que un ordenador pueda entender.
Los buenos programadores escriben código que las personas puedan entender.

– Martin Fowler


El 21 de febrero de 2010 22:39, Eduardo Ferro
<eferro en alea-soluciones.com>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...
>
> La pregunta es, si la forma de hacer este filtrado sin modificar la función
> es hacer un filtro para el sys.stdout o existe alguna otra forma de hacerlo?
> Por otro lado existe alguna forma estándard o por lo menos alguna "mejor
> práctica" para implementar este tipo de objetos?
> Alguna sugerencia sobre como implementar el objeto?
>
> Ahora el objeto FiltroSalida implementa el write, y el flush, pero estoy
> teniendo problemas con la gestión de los buffers... motivo por el que me
> planteaba si toda la idea era correcta o no.
>
> Cualquier sugerrencia será bienvenida
>
> Saludos
>
> --
> Hasta otra!!!
>    Eduardo Ferro Aldama
>    Alea Soluciones
>
>    http://www.alea-soluciones.com
>    http://oss.alea-soluciones.com
>    http://doc.alea-soluciones.com
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20100222/3cf21224/attachment.html>


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