0

我正在使用文件监视器来使用 win32file 监视器监听文件中的更改。下面的代码在 Windows 上运行良好。此代码不适用于 mac osx。在 mac osx 上制作文件监视器的任何建议。

thread1 = myThread(1, tempFileName, tempLocation,selectedFileName)
thread1.start();    

    class myThread (threading.Thread):
                def __init__(self, threadID, fileName, directory, origin):
                    threading.Thread.__init__(self)
                    self.threadID = threadID
                    self.fileName = fileName
                    self.daemon = True
                    self.dir = directory
                    self.originalFile = origin
                def run(self):
                    startMonitor(self.fileName, self.dir, self.originalFile)

    def startMonitor(fileMonitoring,dirPath,originalFile):
                    hDir = win32file.CreateFile (
                      dirPath,
                      FILE_LIST_DIRECTORY,
                      win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE,
                      None,
                      win32con.OPEN_EXISTING,
                      win32con.FILE_FLAG_BACKUP_SEMANTICS,
                      None
                    )
                    readFlags = win32con.FILE_NOTIFY_CHANGE_FILE_NAME  | \
                            win32con.FILE_NOTIFY_CHANGE_DIR_NAME   | \
                            win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES | \
                            win32con.FILE_NOTIFY_CHANGE_SIZE       | \
                            win32con.FILE_NOTIFY_CHANGE_LAST_WRITE | \
                            win32con.FILE_NOTIFY_CHANGE_SECURITY
                    # Wait for new data and call ProcessNewData for each new chunk that's    written
                    while 1:
                        # Wait for a change to occur
                        results = win32file.ReadDirectoryChangesW (
                                                                   hDir,
                                                                   1024,
                                                                   False,
                                                                   readFlags,
                                                                   None
                                                                   )
                        # For each change, check to see if it's updating the file we're interested in
                        for action, file_M in results:
                            full_filename = os.path.join (dirPath, file_M)
                            #print file, ACTIONS.get (action, "Unknown")
                            if len(full_filename) == len(fileMonitoring) and action == 3:
                                if os.path.exists(originalFile):
                                        encrypt_file(fileMonitoring,originalFile)
4

2 回答 2

1

pywin32(Windows的 Python 扩展)顾名思义,仅适用于 Windows。

您可以使用watchdog. 它支持 Mac OS X 以及 Linux、Windows、FreeBSD。

于 2013-10-14T07:37:56.137 回答
0

你可以使用这个。它适用于我的情况。

class ChangeHandler(FileSystemEventHandler):

        def on_any_event(self, event):
            encrypt_file(key, tempFileName, selectedFileName,iv)

    def filemonitor(tempFileName,tempLocation):

        while 1:

            event_handler = ChangeHandler()
            observer = Observer()
            observer.schedule(event_handler, tempLocation, recursive=True)
            observer.start()
            try:
                while True:
                    time.sleep(1)
            except KeyboardInterrupt:
                observer.stop()
            observer.join()        

    Thread(target=filemonitor,args=(tempFileName,tempLocation,)).start()
于 2013-10-23T12:40:34.720 回答