Watchdog: Python 2.7 e Windows 7

Criado em 5 dez. 2011  ·  3Comentários  ·  Fonte: gorakhargosh/watchdog

Como tive alguns problemas com o python2.5, tentei também o python 2.7 e agora recebo um erro diferente:
(Acho que há algo de errado com ctypes e as dlls do Windows, mas não posso dizer muito mais do que isso ...)

Cc C-cException no thread Thread-2:
Traceback (última chamada mais recente):
Arquivo "c: Python27libthreading.py", linha 552, em __bootstrap_inner
self.run ()
Arquivo "c: Python27libsite-packageswatchdog-0.5.4-py2.7.eggwatchdogobserversapi.py", linha 192, em execução
self.queue_events (self.timeout)
Arquivo "c: Python27libsite-packageswatchdog-0.5.4-py2.7.eggwatchdogobserversread_directory_changes.py", linha 80, em queue_events
self.watch.is_recursive)
Arquivo "c: Python27libsite-packageswatchdog-0.5.4-py2.7.eggwatchdogobserverswinapi_common.py", linha 130, em read_directory_changes
Nenhum)
Arquivo "c: Python27libsite-packageswatchdog-0.5.4-py2.7.eggwatchdogobserverswinapi.py", linha 103, em _errcheck_bool
levantar ctypes.WinError ()
WindowsError: [Erro 1] Função incorreta.

Incomplete (need more info) windows

Comentários muito úteis

Fiz algumas pesquisas na API do Windows por conta própria e, com certeza, fui capaz de identificar o problema.

Procurando os valores de retorno de ReadDirectoryChangesW , encontrei o seguinte:

Se o redirecionador de rede ou o sistema de arquivos de destino não suportar esta operação, a função falhará com ERROR_INVALID_FUNCTION.
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365465 (v = vs.85) .aspx

Tenho trabalhado em um compartilhamento de rede.
Copiar os arquivos que preciso assistir para um sistema de arquivos local consertou para mim.

Vou deixar isso aqui, caso outra pessoa encontre o problema enquanto procura a mensagem de erro no Google.

Todos 3 comentários

Oi,
Lamento por ter encontrado esse problema de dois anos, mas acabei de encontrar exatamente o mesmo problema com o Windows 10, python2.7 e watchdog 0.8.3

Ele pode ser reproduzido pelo seguinte trecho de código:

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()

A exceção resultante é semelhante a esta:

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.

Por favor, diga-me se precisar de mais informações.

Fiz algumas pesquisas na API do Windows por conta própria e, com certeza, fui capaz de identificar o problema.

Procurando os valores de retorno de ReadDirectoryChangesW , encontrei o seguinte:

Se o redirecionador de rede ou o sistema de arquivos de destino não suportar esta operação, a função falhará com ERROR_INVALID_FUNCTION.
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365465 (v = vs.85) .aspx

Tenho trabalhado em um compartilhamento de rede.
Copiar os arquivos que preciso assistir para um sistema de arquivos local consertou para mim.

Vou deixar isso aqui, caso outra pessoa encontre o problema enquanto procura a mensagem de erro no Google.

Isso me ajudou apenas hoje. Talvez devêssemos gerar um erro personalizado com uma mensagem um pouco mais detalhada do motivo pelo qual isso aconteceu (ou talvez apenas um link para este problema)

Esta página foi útil?
0 / 5 - 0 avaliações