[pyar] Cómo implementar, era --> Re: tail -f con esteroides en Python para ver logs en tiempo real

Andrés Gattinoni andresgattinoni en gmail.com
Vie Ago 27 11:13:00 ART 2010


2010/8/27 Roberto Alsina <ralsina en netmanagers.com.ar>:
> On Friday 27 August 2010 10:50:39 Daniel Moisset wrote:
>> 2010/8/27 Roberto Alsina <ralsina en netmanagers.com.ar>:
>> >> Me imaginaba esto: cuando tipeo, lo que tipeo aparece en la línea final
>> >> y al darle enter se ejecuta el comando (que puede agregar algún filtro
>> >> sobre esa catarata que viene por la entrada estándar).
>> >>
>> >> Pero lo que tipeo es entrada estándar y ya la tengo ocupada y no se como
>> >> resolverlo :(
>> >>
>> >> Me ayudan?
>> >
>> > Normalmente es así, si estas recibiendo data por stdin no podes hacerlo
>> > interactivo.
>>
>> Pero se tiene que poder: si hago "ls | less", less lee de stdin y es
>> interactivo
>>
>> Sin tiempo de probarlo aca, lo primero que se me ocurre es leer la
>> entrada interactiva de /dev/tty/ (Si, unix only), y la entrada de
>> stdin. y probablemente tengas que multiplexar con select.select, o
>> select.poll, o algo de mas alto nivel para multiplexar estas cosas (se
>> me ocurre glib y eventos, por ej. Calculo que twisted tambien, quizas
>> es overkill)
>
> Es cuestión de "reabrir" stdin (de ahí lo de "normalmente" ;-) En C se hace
> algo con dup o dup2 pero la verdad no me acuerdo bien.

A juzgar por su comportamiento less lee todo lo que haya en stdin (o
en un archivo) una vez... y después solamente vuelve a leer si se lo
indicás (scrolleando hacia abajo)... o sea, cuando scrolleás el chabón
llega al final del buffer que tiene y recién ahí se fija si hay algo
nuevo para leer...
Y cada tanto te saca el control cuando tiene que releer para calcular
el número de líneas (proceso que puede ser cancelado con ctrl+c)...

El tema es que creo que la gracia de un programa como el que quiere
hacer Juanjo es que tendría que manejar más dinámicamente las lecturas
y relecturas...



More information about the pyar mailing list