繁体   English   中英

类型错误:<function> 接受 X 位置参数,但给出 X</function>

[英]TypeError: <Function> takes X positional argument but X were given

我正在尝试对系统中的某些目录进行持续监控,因此我使用了 WatchDog API。 我正在使用的 function:

def watcher(HRSpath):
    src_path = HRSpath
    event_handler = Handler()
    observer = watchdog.observers.Observer()
    observer.schedule(event_handler, path=src_path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

我感兴趣的事件只是删除,因为我正在覆盖 WatchDog class 的另一种方法:

class Handler(watchdog.events.PatternMatchingEventHandler):
    def on_deleted(self, event):
        print("Watchdog received deleted event - % s." % event.src_path)

使用主function:

if __name__ == '__main__':
    pth = "/home/abd/Downloads/"
    pth2 = "/home/abd/Desktop/"

    Proc1 = multiprocessing.Process(target=watcher, args=(pth))
    Proc2 = multiprocessing.Process(target=watcher, args=(pth2))
    Proc1.start()
    Proc2.start()

每当我使用多处理/线程 class 时,代码总是会产生一个错误:

Process Process-1:Traceback(最近一次调用最后):文件“/usr/lib/python3.9/multiprocessing/process.py”,第 315 行,在 _bootstrap self.run() 文件“/usr/lib/python3. 9/multiprocessing/process.py”,第 108 行,运行中 self._target(*self._args, **self._kwargs)最近通话最后):文件“/usr/lib/python3.9/multiprocessing/process.py”,第 315 行,在 _bootstrap self.run() 文件“/usr/lib/python3.9/multiprocessing/process.py”中,第 108 行,在运行中 self._target(*self._args, **self._kwargs) TypeError: watcher() 接受 1 个位置参数,但给出了 18 个

进程以退出代码 0 结束

但是,如果我将主要的 function 代码更改为在单个路径上调用 watcher() 方法,则它可以正常工作:

 if __name__ == '__main__':
        pth = "/home/abd/Downloads/"
        watcher(pth)

完整代码可在此处获得

这是 python 中的缺陷之一:您需要在pth之后添加一个逗号 :-)

Proc1 = multiprocessing.Process(target=watcher, args=(pth, ))

您的代码将 20 个(分别为 18 个)字符作为 arguments 传递,而不是一个字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM