使用 poll 或 select 监控 proc 挂载
monitoring proc mounts using poll or select
我正在尝试编写一个脚本来监视 /proc/mounts 并在检测到只读文件系统时通知回来。
在python中,一种方法是将/proc/mounts的值存储在一个列表中,并在循环中继续执行cat /proc/mounts
并直接检查“ro”实体。但我想使用 poll 或 select 而不是这个,因为它很有效并且只在事件发生时才起作用。
我发现投票比 select 更可取。据我了解,我们可以将 exceptfds 中 /proc/mounts 的 fd 放到 select 中,当有异常时我们会收到通知(请在这里纠正我,行的变化被表示为异常?)。只是为了测试,我正在常规文件上尝试它 - 现在,当我打开并更改 e.txt
时,是否期望此文件将打印整个文件?目前,它没有。我错过了什么?
import select
f = open("e.txt")
while True:
r,w,x = select.select([],[],[f])
f.seek(0)
print f.read()
< check for ro entity and do further>
对于/proc/mounts监控:
import select
f = open("/proc/mounts")
while True:
r,w,x = select.select([],[],[f])
f.seek(0)
print f.read()
< check for ro entity and do further>
如何使用 select 或轮询来实现此目的。
这确实适用于 /proc/mounts 监控。对行的任何更改都被视为异常,因此将 /proc/mounts 的 fd 添加到 exceptfds(这是 select.select([],[],[f])
的 select 中的第三个参数)
import select
f = open("e.txt")
while True:
r,w,x = select.select([],[],[f])
f.seek(0)
print f.read()
我正在尝试编写一个脚本来监视 /proc/mounts 并在检测到只读文件系统时通知回来。
在python中,一种方法是将/proc/mounts的值存储在一个列表中,并在循环中继续执行cat /proc/mounts
并直接检查“ro”实体。但我想使用 poll 或 select 而不是这个,因为它很有效并且只在事件发生时才起作用。
我发现投票比 select 更可取。据我了解,我们可以将 exceptfds 中 /proc/mounts 的 fd 放到 select 中,当有异常时我们会收到通知(请在这里纠正我,行的变化被表示为异常?)。只是为了测试,我正在常规文件上尝试它 - 现在,当我打开并更改 e.txt
时,是否期望此文件将打印整个文件?目前,它没有。我错过了什么?
import select
f = open("e.txt")
while True:
r,w,x = select.select([],[],[f])
f.seek(0)
print f.read()
< check for ro entity and do further>
对于/proc/mounts监控:
import select
f = open("/proc/mounts")
while True:
r,w,x = select.select([],[],[f])
f.seek(0)
print f.read()
< check for ro entity and do further>
如何使用 select 或轮询来实现此目的。
这确实适用于 /proc/mounts 监控。对行的任何更改都被视为异常,因此将 /proc/mounts 的 fd 添加到 exceptfds(这是 select.select([],[],[f])
的 select 中的第三个参数)
import select
f = open("e.txt")
while True:
r,w,x = select.select([],[],[f])
f.seek(0)
print f.read()