[pyar] os.dup(), threads y os.read()

Marcos Dione mdione en grulic.org.ar
Mie Dic 2 05:11:18 ART 2015


On Tue, Dec 01, 2015 at 08:29:35PM -0300, Claudio Freire wrote:
> Pero lo que hiciste no es cerrar el lado del pipe que escribe en
> stdin, sino cerrar el lado que lee.

    es un pipe?

> Así que intentar leer de un fd cerrado es exactamente un "Bad file descriptor".

    con eso estoy de acuerdo, pero ni eso tengo, read() sigue bloqueado y
no me lo esperaba...

> Lo que deberías hacer, que, sí, es medio una goma, es usar dos fd en
> el thread, stdin, y un pipe:
> 
> f = os.dup(0)
> rwake, wwake = os.pipe()
> fcntl.fcntl(f, fcntl.F_SETFL, fcntl.fcntl(f, fcntl.F_GETFL) | os.O_NONBLOCK)
> def foo(f, wake):
>     r,w,x = select.select([f,wake], [], [f,wake])
>     if wake in r:
>         break
>     if f in r:
>         d = os.read(f, 1024)
> os.write(wake, 'w')

    ok, una lástima, ensuciar así mi clasecita que simula (si, mula)
splice(). boh, la vida es una caja de chocolates finos, a veces te toca
el de frutas horrible...

-- 
(Not so) Random fortune:
A veces hay que mentir / a veces hay que decir la verdad / y otras veces hay que callar, y seguir
[...]
A veces hay que matar / a veces hay que saber perdonar / y otras veces hay que olvidar, y reír...
            -- Árbol, "Ya lo sabemos"


More information about the pyar mailing list