python - 修改文件系统时如何打印正确的文件名?
问题描述
在这段代码中,我正在监视文件系统。每当我修改文件时,event.src_path
不显示文件名。相反,它显示.goutputstream-CL5N00
. 我不知道出了什么问题?
给定结果
event type: modified path : /home/bilal/Videos/folder1/fd/.goutputstream-CL5N00
预期结果
event type: modified path : /home/bilal/Videos/folder1/fd/touch
代码
import os
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class MyHandler(FileSystemEventHandler):
def on_modified(self, event):
print(f'event type: {event.event_type} path : {event.src_path}')
def monitor_folders(path):
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path, recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
folder1 = '/home/bilal/Videos/folder1'
if __name__ == "__main__":
m1 = monitor_folders(folder1)
m1.start()
m1.join()
解决方案
您没有在您的问题中提供足够的信息来说明您指定的路径下的文件正在发生什么变化。它可能是一个文本编辑器,其中许多会写入备份文件、写入新文件、执行文件交换等。它可能是创建或移动文件的其他程序(您的代码不会检测到)。
使用 mv、cp、touch 等 shell 命令是测试看门狗与测试编辑器相比更可靠的方法。另请参阅描述 vim 行为的这个问题。
你也在reddit/r/learnpython和codeproject上问过这个问题,并透露你正在使用“默认的 Linux 文本编辑器”,它似乎是在创建备份文件,当你尝试 SublimeText 时,一切都按预期工作,可能是因为 SublimeText 使用了其他一些目录用于备份。带有 pytest 模块的 VSCode 使用 ./pytest_cache 下的文件
除了提供更多信息之外,您还可以使用系统中的更多信息。看门狗包有一个 FileSystemEventHandler 有一个 on_any_event 函数:
class Handler(FileSystemEventHandler):
@staticmethod
def on_any_event(event):
desc = ""
if event.is_directory:
desc += "Directory "
else:
desc += "File "
if event.event_type == "moved":
desc += f"moved {event.src_path}"
elif event.event_type == "deleted":
desc += f"deleted {event.src_path}"
elif event.event_type == "created":
desc += f" created {event.src_path}"
elif event.event_type == "modified":
desc += f"modified {event.src_path}"
elif event.event_type == "closed":
desc += f"closed {event.src_path}"
else:
desc = f"UNEXPECTD {desc} {event.event_type} {event.src_path}"
print(desc)
有时通过将自己限制在仅类型的事件(修改),您会错过可能告诉您使用错误工具测试系统的其他事件。
推荐阅读
- php - 通过增加时间来增加进度条
- java - Arduino 自动调光器
- database - 还原后 MongoDB DB 大小变大
- ms-access - MS 访问表:纠正 Zip_CD 字段中的非前导零
- php - Apache 显示 It Works 而不是 wordpress 起始页
- javascript - 我的 html 页面打不开,只显示标题
- c# - .NET Standard 类库无法加载文件或程序集 Microsoft.Data.Sqlite
- mysql - 如何将条件聚合 mysql 转换为 laravel 查询?
- python - maxpooling2d keras does not do pooling at all
- json - 根据搜索词返回公司列表