python Non-block read file
14,622
O_NONBLOCK
is a status flag, not a descriptor flag. Therefore use F_SETFL
to set File status flags, not F_SETFD
, which is for setting File descriptor flags.
Also, be sure to pass an integer file descriptor as the first argument to fcntl.fcntl
, not the Python file object. Thus use
f = open("/tmp/out", "r")
fd = f.fileno()
fcntl.fcntl(fd, fcntl.F_SETFL, flag | os.O_NONBLOCK)
rather than
fd = open("/tmp/out", "r")
...
fcntl.fcntl(fd, fcntl.F_SETFD, flag | os.O_NONBLOCK)
flag = fcntl.fcntl(fd, fcntl.F_GETFD)
import fcntl
import os
with open("/tmp/out", "r") as f:
fd = f.fileno()
flag = fcntl.fcntl(fd, fcntl.F_GETFL)
fcntl.fcntl(fd, fcntl.F_SETFL, flag | os.O_NONBLOCK)
flag = fcntl.fcntl(fd, fcntl.F_GETFL)
if flag & os.O_NONBLOCK:
print "O_NONBLOCK!!"
prints
O_NONBLOCK!!
Author by
SangminKim
Updated on June 12, 2022Comments
-
SangminKim almost 2 years
I want to read a file with non-block mode. So i did like below
import fcntl import os fd = open("./filename", "r") flag = fcntl.fcntl(fd.fileno(), fcntl.F_GETFD) fcntl.fcntl(fd, fcntl.F_SETFD, flag | os.O_NONBLOCK) flag = fcntl.fcntl(fd, fcntl.F_GETFD) if flag & os.O_NONBLOCK: print "O_NONBLOCK!!"
But the value
flag
still represents 0. Why..? i think i should be changed according toos.O_NONBLOCK
And of course, if i call fd.read(), it is blocked at read().