python2.5で問題が発生したため、python 2.7も試しましたが、別のエラーが発生します。
(ctypesとwindows dllに何か問題があると思いますが、それ以上のことはわかりません...)
Cc C-スレッドThread-2のcException:
トレースバック(最後の最後の呼び出し):
__bootstrap_innerのファイル "c:Python27libthreading.py"、行552
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]関数が正しくありません。
こんにちは、
この2年前の問題にぶつかって申し訳ありませんが、Windows 10、python2.7、watchdog0.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.
さらに詳しい情報が必要な場合は教えてください。
自分でWindowsAPIを掘り下げて、問題を特定できたことを確認しました。
ReadDirectoryChangesWの戻り値を
ネットワークリダイレクタまたはターゲットファイルシステムがこの操作をサポートしていない場合、関数はERROR_INVALID_FUNCTIONで失敗します。
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365465(v = vs.85).aspx
私はネットワーク共有に取り組んできました。
監視する必要のあるファイルをローカルファイルシステムにコピーすると、修正されました。
エラーメッセージをグーグルで検索しているときに他の誰かがこの問題を見つけた場合に備えて、これをここに残しておきます。
これは今日私を助けました。 たぶん、これが起こった理由のもう少し詳細なメッセージでカスタムエラーを発生させる必要があります(またはこの問題へのリンクだけかもしれません)
最も参考になるコメント
自分でWindowsAPIを掘り下げて、問題を特定できたことを確認しました。
ReadDirectoryChangesWの戻り値を
私はネットワーク共有に取り組んできました。
監視する必要のあるファイルをローカルファイルシステムにコピーすると、修正されました。
エラーメッセージをグーグルで検索しているときに他の誰かがこの問題を見つけた場合に備えて、これをここに残しておきます。