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

Eduardo Ferro eferro en alea-soluciones.com
Lun Feb 22 11:30:23 CET 2010


Buenas...
Creo que no he descrito demasiado bien el problema que tengo. La salida que
tengo que controlar es la generada por los comandos de un cli, que se crea
mediante plugins
Para haceros una idea de lo que ya está funcionando (en todos nuestros
servidores):

http://oss.alea-soluciones.com/trac/wiki/BoscliOss
http://oss.alea-soluciones.com/files/screencasts/demo-boscli-oss-asterisk.html

Es decir es una libreria para crear CLIs tipo CISCO o similar mediante la
creación de modulos con comandos.
Estos módulos (plugins) tienen comandos/funciones  que generan salida por la
consola, pero que el CLI que es el que los ejecuta tiene que controlar esta
salida, para por ejemplo


2010/2/22 Soto <scots4ever en gmail.com>

> 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/
>>
>>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>


-- 
Hasta otra!!!
   Eduardo Ferro Aldama
   Alea Soluciones

   http://www.alea-soluciones.com
   http://oss.alea-soluciones.com
   http://doc.alea-soluciones.com
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20100222/7ca15336/attachment.html>


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