select.select() 与常规文件

发布于 2024-10-15 06:44:53 字数 412 浏览 3 评论 0原文

有谁知道 select.select() 是否适用于常规文件或仅适用于套接字/管道?

我在 Solaris、Linux 和 Mac OS X 上尝试过 - 它不会阻止 select.select() 调用。

它只是让我的大脑爆炸,尝试这样的事情却没有运气

import os
import select

fds = [ os.open("read.txt", os.O_RDONLY) ]

while True:
    reads, _, _ = select.select(fds, [], [], 2.0)
    if 0 < len(reads):
        print "-> ",os.read(reads[0], 10)
    else:
        print "timeout"

Does anybody know if select.select() works with regular files or just with sockets/pipes?

I've tried on Solaris, Linux and Mac OS X - it doesn't block on select.select() call.

It just explodes my brain, trying something like this with no luck

import os
import select

fds = [ os.open("read.txt", os.O_RDONLY) ]

while True:
    reads, _, _ = select.select(fds, [], [], 2.0)
    if 0 < len(reads):
        print "-> ",os.read(reads[0], 10)
    else:
        print "timeout"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

瑾兮 2024-10-22 06:44:54

来自文档

请注意,它仅在 Windows 上有效
用于插座;在其他操作上
系统,它也适用于其他文件
类型(特别是在 Unix 上,它
适用于管道)。它不能用于
常规文件来确定是否
自上次读取以来文件已经增长。

这有帮助吗?

From the documentation:

Note that on Windows, it only works
for sockets; on other operating
systems, it also works for other file
types (in particular, on Unix, it
works on pipes). It cannot be used on
regular files to determine whether a
file has grown since it was last read.

Does that help?

凉世弥音 2024-10-22 06:44:54

select 也应该适用于文件,但我认为文件的 FD 将始终准备就绪。

您还应该检查是否到达文件末尾。这是一个对我有用的例子:

import os
import select

fds = [ os.open("data", os.O_RDONLY) ]

while True:
    reads, _, _ = select.select(fds, [], [], 2.0)
    if 0 < len(reads):
        d = os.read(reads[0], 10)
        if d:
            print "-> ", d
        else:
            break
    else:
        print "timeout"

select should work for files also, but I think FD for files gonna be always ready.

You should also check if you reached the end of the file. Here is an example which works for me:

import os
import select

fds = [ os.open("data", os.O_RDONLY) ]

while True:
    reads, _, _ = select.select(fds, [], [], 2.0)
    if 0 < len(reads):
        d = os.read(reads[0], 10)
        if d:
            print "-> ", d
        else:
            break
    else:
        print "timeout"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文