Watchdog: Python 2.7 和 Windows 7

创建于 2011-12-05  ·  3评论  ·  资料来源: gorakhargosh/watchdog

由于我在使用 python2.5 时遇到了一些问题,我也尝试了 python 2.7,现在我得到了一个不同的错误:
(我猜 ctypes 和 windows dll 有问题,但我不能说更多......)

线程 Thread-2 中的 Cc C-cException:
回溯(最近一次调用最后一次):
文件“c:Python27libthreading.py”,第 552 行,在 __bootstrap_inner 中
self.run()
运行中的文件“c:Python27libsite-packageswatchdog-0.5.4-py2.7.eggwatchdogobserversapi.py”,第 192 行
self.queue_events(self.timeout)
文件“c:Python27libsite-packageswatchdog-0.5.4-py2.7.eggwatchdogobserversread_directory_changes.py”,第80行,在queue_events
self.watch.is_recursive)
文件“c:Python27libsite-packageswatchdog-0.5.4-py2.7.eggwatchdogobserverswinapi_common.py”,第 130 行,在 read_directory_changes
没有任何)
_errcheck_bool 中的文件“c:Python27libsite-packageswatchdog-0.5.4-py2.7.eggwatchdogobserverswinapi.py”,第 103 行
引发 ctypes.WinError()
WindowsError: [错误 1] 函数不正确。

Incomplete (need more info) windows

最有用的评论

我自己对 windows api 进行了一些挖掘,果然我能够确定问题所在。

查找ReadDirectoryChangesW的返回值我发现以下内容:

如果网络重定向器或目标文件系统不支持此操作,则该函数将失败并显示 ERROR_INVALID_FUNCTION。
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365465 (v=vs.85).aspx

我一直在研究网络共享。
将我需要监视的文件复制到本地文件系统为我修复了它。

我会留在这里,以防其他人在谷歌搜索错误消息时发现这个问题。

所有3条评论

你好,
我很抱歉碰到这个两年前的问题,但在 Windows 10、python2.7 和看门狗 0.8.3 上遇到了完全相同的问题

可以通过以下代码重现:

import time

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

class Handler(FileSystemEventHandler):
    def on_any_event(self, event):
        print "File changed: %s" % event.src_path

if __name__ == '__main__':
    event_handler = Handler()
    observer = Observer()
    observer.schedule(event_handler, '.', recursive=True)
    observer.start()

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

结果异常如下所示:

Exception in thread Thread-2:
Traceback (most recent call last):
  File "c:\python27\Lib\threading.py", line 801, in __bootstrap_inner
    self.run()
  File "C:\Users\IEUser\Envs\xtrude\lib\site-packages\watchdog\observers\api.py", line 146, in run
    self.queue_events(self.timeout)
  File "C:\Users\IEUser\Envs\xtrude\lib\site-packages\watchdog\observers\read_directory_changes.py", line 77, in queue_events
    winapi_events = read_events(self._handle, self.watch.is_recursive)
  File "C:\Users\IEUser\Envs\xtrude\lib\site-packages\watchdog\observers\winapi.py", line 347, in read_events
    buf, nbytes = read_directory_changes(handle, recursive)
  File "C:\Users\IEUser\Envs\xtrude\lib\site-packages\watchdog\observers\winapi.py", line 307, in read_directory_changes
    raise e
WindowsError: [Error 1] Incorrect function.

如果您需要任何进一步的信息,请告诉我。

我自己对 windows api 进行了一些挖掘,果然我能够确定问题所在。

查找ReadDirectoryChangesW的返回值我发现以下内容:

如果网络重定向器或目标文件系统不支持此操作,则该函数将失败并显示 ERROR_INVALID_FUNCTION。
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365465 (v=vs.85).aspx

我一直在研究网络共享。
将我需要监视的文件复制到本地文件系统为我修复了它。

我会留在这里,以防其他人在谷歌搜索错误消息时发现这个问题。

这对我今天有帮助。 也许我们应该提出一个自定义错误,并提供更详细的消息,说明为什么会发生这种情况(或者可能只是指向此问题的链接)

此页面是否有帮助?
0 / 5 - 0 等级