0

下面是一个工作 python 脚本,它通过命令行接受目录路径并监视该目录,吐出出现在目录中的任何新图像文件的名称。我想通过命令行添加第二个参数,该参数最终会输入到每当新图像文件出现在该目录中时调用的函数。

from watchdog.events import PatternMatchingEventHandler


class MyHandler(PatternMatchingEventHandler):
    patterns = ["*.jpg", "*.png", "*.tif"]

    # we only care about newly created images
    def on_created(self, event):
        print(event.src_path + "want to have arg2 available here") 


from watchdog.observers.polling import PollingObserver as Observer

if __name__ == '__main__':
    args = sys.argv[1:]
    observer = Observer()
    observer.schedule(MyHandler(), path=args[0] if args else '/images')
    observer.start()

    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()

    observer.join()

这样,当我调用文件时,它可以是这样的: python myfile.py /path/to/images arg2 并且 arg2 将在 on_created(self, event) 中可用。对不起,这么新的课程!

4

1 回答 1

0

您需要将额外的参数存储在 的实例中MyHandler,以便该on_event方法在调用时可以访问它们。就像是

class MyHandler(PatternMatchingEventHandler):
    patterns = ["*.jpg", "*.png", "*.tif"]

    def __init__(self, *args):
        super().__init__()
        self.extra_args = args

    def on_created(self, event):
        print(event.src_path + extra_args[0])

 from watchdog.observers.polling import PollingObserver as Observer

if __name__ == '__main__':
    args = sys.argv[1:]    
    observer = Observer()
    observer.schedule(MyHandler(*args[1:]), path=args[0] if args else '/images')
    observer.start()

    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()

    observer.join()
于 2018-09-26T19:50:46.467 回答