2015-05-29 3 views
5

प्रश्न: How do I watch a file for changes using Python? वॉचडॉग का उपयोग करने का सुझाव देता है, लेकिन मुझे लगता है कि यह केवल एक निर्देशिका देखने में सक्षम था, फाइल नहीं।पाइथन का उपयोग करके परिवर्तनों के लिए निर्देशिका नहीं, मैं फ़ाइल कैसे देखूं?

$ python watchdog-test.py ab_test_res.sh & 
[1] 30628 
[email protected]:~/laike9m$ Traceback (most recent call last): 
    File "watchdog-test.py", line 15, in <module> 
    observer.start() 
    File "/usr/local/lib/python2.7/dist-packages/watchdog/observers/api.py", line 255, in start 
    emitter.start() 
    File "/usr/local/lib/python2.7/dist-packages/watchdog/utils/__init__.py", line 111, in start 
    self.on_thread_start() 
    File "/usr/local/lib/python2.7/dist-packages/watchdog/observers/inotify.py", line 121, in on_thread_start 
    self._inotify = InotifyBuffer(path, self.watch.is_recursive) 
    File "/usr/local/lib/python2.7/dist-packages/watchdog/observers/inotify_buffer.py", line 35, in __init__ 
    self._inotify = Inotify(path, recursive) 
    File "/usr/local/lib/python2.7/dist-packages/watchdog/observers/inotify_c.py", line 187, in __init__ 
    self._add_dir_watch(path, recursive, event_mask) 
    File "/usr/local/lib/python2.7/dist-packages/watchdog/observers/inotify_c.py", line 363, in _add_dir_watch 
    raise OSError('Path is not a directory') 
OSError: Path is not a directory 

तो सबसे अच्छा समाधान है: watchdog-test.py प्रहरी के नमूने स्क्रिप्ट है? मैं लिनक्स (उबंटू 12.04) का उपयोग कर रहा हूं। बीटीडब्ल्यू मैं मतदान का उपयोग नहीं करना चाहता।

+1

क्या ऑपरेटिंग सिस्टम? मुझे निश्चित रूप से पता नहीं है, लेकिन मुझे लगता है कि विंडोज केवल निर्देशिका देखने में सहायता करता है। –

+0

@ कोलोनेल थर्टी दो लिनक्स। – laike9m

+3

inotify में देखें http://linux.die.net/man/7/inotify –

उत्तर

2

आप उस फ़ाइल को देखकर वॉचडॉग के साथ एक फ़ाइल देख सकते हैं जिसमें फ़ाइल है और केवल आपकी फ़ाइल को प्रभावित करने वाली घटनाओं को बदलने का जवाब दे रहा है। कुछ इस तरह यह तुम्हारे लिए क्या होगा:

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

class FileModifiedHandler(FileSystemEventHandler): 

    def __init__(self, path, file_name, callback): 
     self.file_name = file_name 
     self.callback = callback 

     # set observer to watch for changes in the directory 
     self.observer = Observer() 
     self.observer.schedule(self, path, recursive=False) 
     self.observer.start() 
     self.observer.join() 

    def on_modified(self, event): 
     # only act on the change that we're looking for 
     if not event.is_directory and event.src_path.endswith(self.file_name): 
      self.observer.stop() # stop watching 
      self.callback() # call callback 


from sys import argv, exit 

if __name__ == '__main__': 

    if not len(argv) == 2: 
     print("No file specified") 
     exit(1) 

    def callback(): 
     print("FILE WAS MODIFED") 

    FileModifiedHandler('.', argv[1], callback) 

मैं केवल खिड़कियों पर यह परीक्षण करने में सक्षम था, लेकिन यह ओएस नास्तिक होना चाहिए।

संबंधित मुद्दे

 संबंधित मुद्दे