python2.5μ λͺ κ°μ§ λ¬Έμ κ° μμκΈ° λλ¬Έμ python 2.7λ μλνμ§λ§ μ΄μ λ€λ₯Έ μ€λ₯κ° λ°μν©λλ€.
(ctypes λ° Windows dllμ λ¬Έμ κ° μλ κ² κ°μ§λ§ κ·Έ μ΄μμ λ§ν μ μμ΅λλ€...)
μ€λ λ Thread-2μ Cc C-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
μμ)
νμΌ "c:Python27libsite-packageswatchdog-0.5.4-py2.7.eggwatchdogobserverswinapi.py", 103ν, _errcheck_bool
ctypes.WinError() λ°μ
Windows μ€λ₯: [μ€λ₯ 1] μλͺ»λ κΈ°λ₯μ
λλ€.
μλ
,
μ΄ 2λ
λ λ¬Έμ λ₯Ό λ²ν΄μ λ―Έμνμ§λ§ Windows 10, python2.7 λ° watchdog 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 μ λ°ν κ°μ
λ€νΈμν¬ κ³΅μ μμ μ νκ³ μμ΅λλ€.
κ΄μ°°ν΄μΌ νλ νμΌμ λ‘컬 νμΌ μμ€ν μ 볡μ¬νλ©΄ λ¬Έμ κ° ν΄κ²°λμμ΅λλ€.
λ€λ₯Έ μ¬λμ΄ μ€λ₯ λ©μμ§λ₯Ό κ²μνλ λμ μ΄ λ¬Έμ λ₯Ό λ°κ²¬ν κ²½μ°λ₯Ό λλΉνμ¬ μ¬κΈ°μ λ¨κ²¨ λ‘λλ€.