[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
Dom Feb 21 22:39:33 CET 2010
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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20100221/4f942e12/attachment.html>
Más información sobre la lista de distribución Python-es