2013-10-14 1 views
0

Я использую монитор файлов для прослушивания изменений в файле с помощью монитора win32file. Этот ниже код отлично работает на окнах. Этот код не работает на mac osx. Любые предложения по созданию монитора файлов на Mac OSX.Мониторинг файлов в osx 10.8.2 с использованием python

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) 

ответ

1

pywin32 (Python extensions for Windows) работает только в Windows, как следует из названия.

Вы можете использовать watchdog. Он поддерживает Mac OS X, а также Linux, Windows, FreeBSD.

+0

Я ценю ваше предложение. Когда файл открывается любым типом файла, он должен прослушивать изменения и вызывать функцию шифрования. Когда открытый файл закрыт, он должен вернуться из прослушивателя. Таким образом, мониторинг файлов постоянно активен при открытии файла. Я не могу найти это с помощью сторожевого пса. – user2877960

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()