python 非块读文件
python Non-block read file
我想以非块模式读取文件。
所以我喜欢下面
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!!"
但是值flag
仍然代表0。
为什么..?我想我应该根据 os.O_NONBLOCK
进行更改
当然,如果我调用 fd.read(),它会在 read() 处被阻塞。
O_NONBLOCK
是状态标志,不是描述符标志。因此使用 F_SETFL
到 set File status flags, not F_SETFD
, which is for setting File descriptor flags.
此外,请务必将整数文件描述符作为第一个参数传递给 fcntl.fcntl
,而不是 Python 文件对象。因此使用
f = open("/tmp/out", "r")
fd = f.fileno()
fcntl.fcntl(fd, fcntl.F_SETFL, flag | os.O_NONBLOCK)
而不是
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!!"
打印
O_NONBLOCK!!
我想以非块模式读取文件。 所以我喜欢下面
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!!"
但是值flag
仍然代表0。
为什么..?我想我应该根据 os.O_NONBLOCK
当然,如果我调用 fd.read(),它会在 read() 处被阻塞。
O_NONBLOCK
是状态标志,不是描述符标志。因此使用 F_SETFL
到 set File status flags, not F_SETFD
, which is for setting File descriptor flags.
此外,请务必将整数文件描述符作为第一个参数传递给 fcntl.fcntl
,而不是 Python 文件对象。因此使用
f = open("/tmp/out", "r")
fd = f.fileno()
fcntl.fcntl(fd, fcntl.F_SETFL, flag | os.O_NONBLOCK)
而不是
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!!"
打印
O_NONBLOCK!!