用于文件夹列表的 Python Inotify
Posted
技术标签:
【中文标题】用于文件夹列表的 Python Inotify【英文标题】:Python Inotify for a list of folders 【发布时间】:2017-07-31 16:10:12 【问题描述】:我正在寻找一种方法来检查 5 个域的文档根列表以 inotify 目录监视。
对于单个文件夹,它是这样工作的
DIRECTORY_TO_WATCH = "/home/serveradmin/"
我有一个需要为我的服务器递归检查的文件夹列表。
我刚开始学习 python 并且有一些 C 语言的实践经验。刚刚开始学习发展。
有没有人可以帮助我解决这个问题?我需要对名为 /tmp/folderlist.txt 的文件中提到的 5 个文件夹进行递归 inotify 监视
在我可以参考的任何地方都有类似的代码吗?
【问题讨论】:
【参考方案1】:安装inotify-tools
:
sudo apt-get install inotify-tools
并尝试类似:
inotifywait = ['inotifywait',
'--recursive',
'--quiet',
'--monitor', ## '--timeout', '1',
'--event',
'CREATE',
'--format', '%f']
from subprocess import PIPE, Popen
p = Popen(inotifywait + paths, stdout=PIPE)
for line in iter(p.stdout.readline, ''):
print(line)
对于 macosx,您可以使用 fswatch
获得类似的结果:
if sys.platform == 'darwin':
inotifywait = ['fswatch', '--event', 'Created']
对于 Windows,请参阅:Is there anything like inotify on Windows?
【讨论】:
【参考方案2】:所以你想创建一个文件夹列表,然后执行一个 for 语句来检查它们是否存在。
也是这样
import os
list = ['folder1', 'folder2', 'folder3', 'folder4', 'folder5']
for i in list:
print("\nDoes", list[i], "exsist?", os.path.exists("/home/serveradmin/" + list[i]))
用正确的文件夹名称替换列表中的项目!
祝你好运!
【讨论】:
OP 想要使用 inotify 以便在目录更改时通知他们。他们不想检查目录是否存在 是的,他是对的。这需要传递给 inotify 以递归地关注文件更改 还有其他可用的选项吗?也有人知道哪个是对 python 转换器最有效/最有用的 c 编程吗?有没有这样的事 @Sumesh 你让它工作了吗?如果是这样,请将我的答案标记为正确,以便将来的人可以解决此问题!【参考方案3】:这是我开始工作的示例代码。我需要将“DIRECTORY_TO_WATCH”替换为我将添加到文件中的文件夹列表。所以基本上它将是一个 txt 文件中指定的文件夹列表,这样我就可以继续在该文件中添加未来的文件夹,而无需每次都添加核心代码。
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class Watcher:
DIRECTORY_TO_WATCH = "/path/to/my/directory"
def __init__(self):
self.observer = Observer()
def run(self):
event_handler = Handler()
self.observer.schedule(event_handler, self.DIRECTORY_TO_WATCH, recursive=True)
self.observer.start()
try:
while True:
time.sleep(5)
except:
self.observer.stop()
print "Error"
【讨论】:
以上是关于用于文件夹列表的 Python Inotify的主要内容,如果未能解决你的问题,请参考以下文章