[pyar] clonar un pipe

Alejandro Santos listas en alejolp.com
Lun Oct 11 11:45:35 ART 2010


2010/10/11 Luciano Bello <lbello en gmail.com>:
> Estimados pythoneros!
>         Por razones que no vienen al caso, necesito clonar un pipe.
> Es decir, dado un pipe (con data dentro) definido por su
> correspondiente par de file descriptors, necesito un nuevo par, que
> contenga la misma data dentro. Algo así como clone_pipe que se
> comporte de forma similar a la siguiente:
>
> In [1]: import os
> In [2]: (r1,w1)=os.pipe()
> In [3]: os.write(w1, "123456789")
> Out[3]: 9
> In [4]: os.read(r1,2)
> Out[4]: '12'
> In [5]: (r2,w2,)=clone_pipe(r1,w1)
> In [6]: os.read(r1,2)
> Out[6]: '34'
> In [7]: os.read(r2,2)
> Out[7]: '34'
>
>        Alguna idea si esta función existe? En cado de no existir,
> como la harían?
>

No digo que no se pueda, pero usando os.read() no se me ocurre forma
de resolverlo; es una llamada directa a la libc.

Un pipe es un buffer de 1 productor 1 consumidor, donde una vez que se
consumen los datos no se pueden volver a leer.

Para lograr lo que andas buscando necesitas convertirlo a un buffer de
1 productor 2 consumidores, con la caracteristica que los dos
consumidores obtengan los mismos datos con cada llamada de read.

Una posible solucion es hacer alguna calse Wrapper que guarde en un
buffer interno los datos del read del pipe, y tus dos consumidores
accedan mediante el metodo read() a un buffer interno de ese wrapper.

-- 
Alejandro Santos
http://alejolp.com.ar



More information about the pyar mailing list