当前位置: 首页 > 知识库问答 >
问题:

watchdog在上载zip文件时写入重复文件

韦繁
2023-03-14

下面是通过FileBrowser将文件添加到目录的事件的问题。加载单个文件会产生一堆事件:

我认为消息的数量取决于上传zip文件的时间。我不知道如何用watchdog来解决它,下面是代码:

import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import logging

class Watcher:
    DIRECTORY_TO_WATCH = "/input"

    def __init__(self):
        self.observer = Observer()

    def run(self):
        event_handler = DataHandler()
        self.observer.schedule(event_handler, self.DIRECTORY_TO_WATCH, recursive=False)
        self.observer.start()
        try:
            while True:
                time.sleep(5000)
        except:
            self.observer.stop()
            print("Error")

        self.observer.join()


class DataHandler(FileSystemEventHandler):

    @staticmethod
    def on_any_event(event):
        if event.is_directory:
            return None
        
        elif event.event_type == "created":
            print(f"Received created event {event.src_path}")

        elif event.event_type == "modified":
            print(f"Received modified event {event.src_path}")

if __name__ ==   "__main__":
    w = Watcher()
    w.run()

共有1个答案

程和畅
2023-03-14

如果只想为同一文件打印一个事件,可以保存上次修改的路径,仅在新路径不同时打印消息:

class DataHandler(FileSystemEventHandler):
    last_path_modified = ""

    @staticmethod
    def on_any_event(event):
        if event.is_directory:
            return None
        
        elif event.event_type == "created":
            print(f"Received created event {event.src_path}")

        elif event.event_type == "modified":
            if event.src_path != self.last_path_modified:
                print(f"Received modified event {event.src_path}")
                self.last_path_modified = event.src_path

当然,您可以调整这段代码,使其与您想要应用的逻辑相匹配,如果它被标记了x次,则可以再次打印它,或者跟踪第一条消息以来的时间,如果距离上一条消息已超过x秒/分钟,则再次打印它。

 类似资料:
  • 我正在用python编写一个CSV文件,使用以下行: 不幸的是,输出显示了一个无用的列,如下所示: 如何才能摆脱这个无用的第一纵队?

  • 如何将内存中的zipfile写入文件?

  • 问题内容: 我必须阅读tomcat日志文件,并在一段时间(例如:一个小时)后再次读取该文件(仅针对新添加的内容),因此我创建了RandomAccessFile来记录我完成的最后一个位置并使用BufferedReader.readLine()方法。 但是,我发现有时我无法读取文件的整行。 例如,tomcat正在尝试编写以下内容(仅作为示例): 192.168.0.0本地主机/index.html .

  • 我正在尝试将文件上传到我的服务器,然后将该文件发送到Zendesk。Zendesk文档显示了如何: 这很好用。我现在必须用Guzzle(版本6)重写这个。我正在使用Symfony 2.7: 文件正在上传,但当我下载它时,它的内容中也会包含一些元数据(破坏了其他一些文件类型)。我想我没有正确上传,因为卷发的另一种方式很好。 我不知道为什么这些数据也作为文件的一部分发送(我不想这样做),或者是否可以为

  • 但应用程序仍然允许上传任何MIME类型的文件。哪里有问题?另外,限制maxFiles也不起作用--它允许我上传无限多个文件。

  • 我创建了一个Java游戏,当游戏结束时,执行一个方法,告诉用户输入他/她的名字,然后他们的分数将保存在playscores中。txt文档。这很好用。然而,我想要的不仅仅是这份文件中一个人的分数。我想要它,这样每个玩游戏的名字和分数将保存在这个文件中。非常感谢您的帮助。 这是我的gameComplete方法代码: 我尝试过不同的东西,比如Objectoutputstream,但不幸的是,我不知道该怎