由于我在使用 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] 函数不正确。
你好,
我很抱歉碰到这个两年前的问题,但在 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
我一直在研究网络共享。
将我需要监视的文件复制到本地文件系统为我修复了它。
我会留在这里,以防其他人在谷歌搜索错误消息时发现这个问题。
这对我今天有帮助。 也许我们应该提出一个自定义错误,并提供更详细的消息,说明为什么会发生这种情况(或者可能只是指向此问题的链接)
最有用的评论
我自己对 windows api 进行了一些挖掘,果然我能够确定问题所在。
查找ReadDirectoryChangesW的返回值我发现以下内容:
我一直在研究网络共享。
将我需要监视的文件复制到本地文件系统为我修复了它。
我会留在这里,以防其他人在谷歌搜索错误消息时发现这个问题。