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 ์ ๋ฐํ ๊ฐ์
๋คํธ์ํฌ ๊ณต์ ์์ ์ ํ๊ณ ์์ต๋๋ค.
๊ด์ฐฐํด์ผ ํ๋ ํ์ผ์ ๋ก์ปฌ ํ์ผ ์์คํ ์ ๋ณต์ฌํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.
๋ค๋ฅธ ์ฌ๋์ด ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๊ฒ์ํ๋ ๋์ ์ด ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ์ฌ๊ธฐ์ ๋จ๊ฒจ ๋ก๋๋ค.