Python看门狗模块重复事件(编辑:不是看门狗问题)

时间:2018-08-24 16:27:19

标签: python-3.x windows-10 pywin32 python-watchdog

我正在创建一个python脚本,该脚本将识别对日志文件的更改并从新日志中打印一些数据。

我使用看门狗创建了一个事件处理程序,除此以外,其他一切似乎都正常运行,每次修改文件时都会得到重复的事件。我检查了创建和删除操作,它们都按预期工作并且触发了一次。

我读过类似的问题,该问题解释了保存文件时发生的创建事件和修改事件,但这不是我的情况。我刚得到两个修改事件。

这是我的代码:

import os, sys, time
import subprocess
import threading

import win32print
from tkinter import filedialog
from tkinter import *


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


class Handler(FileSystemEventHandler):
# docstring for FileSystemEventHandler
    def __init__(self, observer, filename, dirname):
        # super(Handler, FileSystemEventHandler).__init__(self,)
        self.observer = observer
        self.filename = filename
        self.dirname = dirname

        print("Handler filename = " , self.filename)
        print("Handler dirname = " , self.dirname)

    def on_modified(self, event):
        if self.filename == event.src_path:
            print("The file was modified")
            print (event.src_path)
            # go get the last line and print the data
            # try:
            #   hJob = win32print.StartDocPrinter (hPrinter, 1, ("test of raw data", None, "RAW"))
            #   try:
            #     win32print.StartPagePrinter (hPrinter)
            #     win32print.WritePrinter (hPrinter, raw_data)
            #     win32print.EndPagePrinter (hPrinter)
            #   finally:
            #     win32print.EndDocPrinter (hPrinter)
            # finally:
            #   win32print.ClosePrinter (hPrinter)


    def on_created(self, event):
        print("A file was created (", event.src_path, ")")

    def on_deleted(self, event):
        print("A file was deleted (", event.src_path, ")")


if __name__ == "__main__":
    Flags=2
    Name=None
    Level=1
    printers = win32print.EnumPrinters(Flags, Name, Level)

    print("\nChoose a printer to use:")
    i=1
    for p in printers:
      print(i,')' , p[2])
      i = i+1


if sys.version_info >= (3,):
  raw_data = bytes ("This is a test", "utf-8")
else:
  raw_data = "This is a test"
printer = int(input())

printer_name = printers[printer-1][2] #win32print.GetDefaultPrinter ()
print("You chose ", printer_name, "\nI will now print from the specified file with this printer")
hPrinter = win32print.OpenPrinter (printer_name)


# root = Tk()
# root.filename =  filedialog.askopenfilename(initialdir = "/Desktop",title = "Select file",filetypes = (("log files","*.log"),("all files","*.*")))
file_path = "some_file_path"    #   root.filename
file_directory = os.path.dirname(file_path)
# print (file_path)
print (file_directory)

observer = Observer()
event_handler = Handler(observer, file_path, file_directory)
observer.schedule(event_handler, path=file_directory, recursive=False)
observer.start()
observer.join()

任何想法都会感激

编辑:

经过一些调试后,我发现Windows10每次保存文件时都会两次更改文件修改时间。

概念证明代码是这样的:

prev_modification_time = os.path.getmtime(file_path)
    while True:
        current_mod_time = os.path.getmtime(file_path)
        if prev_modification_time != current_mod_time :
            print ("the file was modified, last modification time is: ", current_mod_time)
            prev_modification_time = current_mod_time
        pass

enter image description here

最终编辑:

在linux上测试我的代码(准确地说是Debian Stretch)之后,它就像一个魅力。因此,与先前的编辑结合起来,可能表明看门狗工作正常,而Windows10则存在一些问题。我应该在其他问题上还是在这里发布?

0 个答案:

没有答案
相关问题