2015-06-23 2 views
2

Я хочу отслеживать определенные файлы внутри папки, когда когда-либо происходит смена файла, я хотел бы зафиксировать это изменение и на основе этого изменения я хочу вызвать определенные программа.Мониторинг нескольких изменений файла внутри папки, а затем запуск другой программы с использованием python

Первоначально я упоминал переполнение стека и использовал некоторый код. Когда я пытаюсь реализовать, это не может вызвать определенную программу, но она фиксирует изменение в одиночку.

Пожалуйста, найти свой код ниже:

import os, sys, time 
from time import gmtime, strftime 

def files_to_timestamp(path): 
files = [os.path.join(path, f) for f in os.listdir(path)] 
return dict ([(f, os.path.getmtime(f)) for f in files]) 

if __name__ == "__main__": 

path_to_watch = r"Desktop\Test\" 
print "Watching ", path_to_watch 

before = files_to_timestamp(path_to_watch) 

while 1: 
    time.sleep (2) 
    after = files_to_timestamp(path_to_watch) 

    added = [f for f in after.keys() if not f in before.keys()] 
    removed = [f for f in before.keys() if not f in after.keys()] 
    modified = [] 

    for f in before.keys(): 
     if not f in removed: 
      if os.path.getmtime(f) != before.get(f): 
       modified.append(f) 

    if added: print "Added: ", ", ".join(added) 
    if removed: print "Removed: ", ", ".join(removed) 
    if modified: 
     file1 = ", ".join(modified) 
     print "Updated:",strftime("%Y-%m-%d %H:%M:%S", gmtime()),file1 

     if file1 ==     
      'Desktop\Test\L90FLA_TSMC_BE_SBE_THEBE_LOT_MONTHLY_Test.eff': 
      execfile(r'H:\Python programs\PSBE_THEBE_New requirments.py') 

     elif file1 == 
      'Desktop\Test\L90FLA_TSMC_BE_SBE_CARME_MONTHLY_Test.eff': 
      execfile(r'H:\Python programs\PSBE_CARME_New requirments.py') 

     elif file1 ==  
      'Desktop\Test\L90FLA_TSMC_BE_SBE_ELARA_LOT_MONTHLY_Test.eff': 
      execfile(r'H:\Python programs\PSBE_ELARA_New requirments.py') 

    before = after 

Прошу никого, чтобы помочь мне в этом. Заранее спасибо.

+0

Я хочу, чтобы запустить другую программу только после того, как изменение файла делается. – user3827728

ответ

0

Вы пытались использовать inotify API [1]? Есть питона интерфейсы к нему, конечно, ...

[1] http://man7.org/linux/man-pages/man7/inotify.7.html

+0

Спасибо за ответ, я хотел бы реализовать это в Windows и inotify для linux, могу ли я использовать inotify для этого? – user3827728

+0

Попробуйте ответить на этот вопрос: http://stackoverflow.com/questions/3517460/is-there-anything-like-inotify-on-windows – f13o

Смежные вопросы