【问题标题】:Python trigger file change eventsPython 触发文件更改事件
【发布时间】:2017-06-23 05:32:01
【问题描述】:

我有一组由应用程序创建的 100 个文件。文件不是按顺序动态更新的。使用 Python,我正在尝试读取文件。但是,我不知道哪个文件在什么时间更新。

我不想每次都循环遍历每个文件以检查在实例中更新了哪些文件。我可以创建多个进程/线程来触发更新文件的主进程。有没有其他方法,比如文件更新可以通知主python进程,以便只读取那些文件??

谢谢。

【问题讨论】:

    标签: python-2.7 python-multiprocessing


    【解决方案1】:

    试试 python 模块“看门狗”。它将启动一个文件或文件夹观察器,可用于启动文件/文件夹更改的功能。 https://pypi.python.org/pypi/watchdog

    下面的示例将监视一个文件夹并通知其中文件的每次更改。如果您只想要特定事件,请参阅文档。 https://pythonhosted.org/watchdog/api.html#watchdog.events.FileSystemEventHandler

    import time
    from watchdog.observers import Observer
    from watchdog.events import FileSystemEventHandler
    
    
    class EventHandler(FileSystemEventHandler):
        def on_any_event(self, event):
            print event
    
    
    if __name__ == "__main__":
        path = "/PATH/TO/YOUR/FOLDER"
        event_handler = EventHandler()
        observer = Observer()
        observer.schedule(event_handler, path, recursive=True)
        observer.start()
        try:
            while True:
                time.sleep(1)
        except KeyboardInterrupt:
            observer.stop()
        observer.join()
    

    【讨论】:

    • 并非所有文件都创建在同一个文件夹中。它们是在不同的文件夹中创建的,比如 100。那么我需要创建 100 个观察者吗??
    • 这些文件夹是否在您的文件系统中,或者它们都在一个特定于应用程序的顶级目录中?
    • 它们都有一个特定的顶级目录。
    • 然后您可以将顶部目录设置为路径。使用 schedule 方法的recursive 参数,还可以观察到给定路径下的所有目录。
    • 如果我想在不使用顶级目录的情况下观察每个文件,那么我是否必须为此创建多个观察者??
    【解决方案2】:

    您可以在文件被修改时将event.src_path 传递给您的主进程(在事件处理程序的on_modified 事件中处理它)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 2021-08-24
      相关资源
      最近更新 更多