How to read named FIFO non-blockingly? How to read named FIFO non-blockingly? python python

How to read named FIFO non-blockingly?


According to the manpage of read(2):

   EAGAIN or EWOULDBLOCK          The  file  descriptor  fd refers to a socket and has been marked          nonblocking   (O_NONBLOCK),   and   the   read   would    block.          POSIX.1-2001  allows  either error to be returned for this case,          and does not require these constants to have the same value,  so          a portable application should check for both possibilities.

So what you're getting is that there is no data available for reading. It is safe to handle the error like this:

try:    buffer = os.read(io, BUFFER_SIZE)except OSError as err:    if err.errno == errno.EAGAIN or err.errno == errno.EWOULDBLOCK:        buffer = None    else:        raise  # something else has happened -- better reraiseif buffer is None:     # nothing was received -- do something elseelse:    # buffer contains some received data -- do something with it

Make sure you have the errno module imported: import errno.


out = open(fifo, 'w')

Who will close it for you?Replace your open+write by this:

with open(fifo, 'w') as fp:    fp.write('sth')

UPD:Ok, than just make this:

out = os.open(fifo, os.O_NONBLOCK | os.O_WRONLY)os.write(out, 'tetet')