找到文件后如何停止看门狗的执行?

问题描述 投票:0回答:1

我编写了以下代码来搜索文件路径中的所有 csv 文件并打印第一个 csv 文件。但是,即使在看门狗执行该操作之后,我的代码仍会继续运行。一旦发现并打印设置文件,如何让看门狗停止。

本质上,如果找到并读取文件,我希望代码停止运行。

import sys
import time
import logging
from watchdog.observers import Observer 
from watchdog.events import LoggingEventHandler  


if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s - %(message)s')
    path = "C:/Users/Desktop/Test/"
    extension = 'csv'
    all_filenames = [i for i in glob.glob('*.{}'.format(extension))]

 # convert 1st csv in list to pandas df then print
    first_csv = pd.read_csv(all_filenames[0])
    print(first_csv)
    
   
    event_handler = LoggingEventHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)  

    observer.start()  

#for starting the observer thread
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
python watchdog
1个回答
0
投票

这对我有用

from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler


class EventHandler(PatternMatchingEventHandler):
    def __init__(self):
        PatternMatchingEventHandler.__init__(self, patterns=['*.csv'], ignore_directories=True, case_sensitive=True)
    def on_created(self, event):
        global Created
        Created = True
        print(f'{event.src_path} has been created!')

def FileWatcher(Path):
    observer = Observer()
    event_handler = EventHandler()
    observer.schedule(event_handler, path=Path, recursive=False)
    observer.start()
    try:
        while not Created:
            pass
    except KeyboardInterrupt:
        observer.stop()
    finally:
        observer.stop()
        observer.join()


if __name__ == '__main__':
    Created = False
    FileWatcher('./watched_directory')
© www.soinside.com 2019 - 2024. All rights reserved.