аргумент командной строки для сторожевой функции - PullRequest
0 голосов
/ 26 сентября 2018

Ниже приведен рабочий скрипт на 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).извините, так плохо знакомый с классами!

1 Ответ

0 голосов
/ 26 сентября 2018

Вам необходимо сохранить дополнительные аргументы в экземпляре 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...