Oi,
Tento este exemplo simples:
watchmedo shell-command --patterns = "*. bin" --command 'copytoserver.bat'
que funciona muito bem: quando um .bin é criado no diretório atual, copytoserver.bat é executado DUAS VEZES, não apenas UMA
É um problema ou estou perdendo algo em provar bons argumentos?
Obrigado pela ajuda
Gilles
Na verdade, isso está acontecendo.
No Linux, um simples touch filename
emitiria 2 mensagens: a criação e a modificação do arquivo, se o arquivo não existir. Provavelmente o mesmo está acontecendo no Windows, e é por isso que ele está sendo executado duas vezes em vez de uma vez.
Salvar em vim
aqui com algum parâmetro arbitrário fez com que fosse executado 11 vezes. Provavelmente porque está incluindo exclusão de arquivo, criação de arquivo temporário e renomeação.
Provavelmente seria melhor dividir este projeto em 2: a biblioteca ( watchdog
) e o aplicativo shell ( watchmedo
). Não sei quantos usuários dependem de ambos, mas talvez a filtragem de eventos não deva ser a mesma em ambos e isso pode se tornar um fardo para manter.
Corrigi esse problema na dose adicionando um único corredor com um "debouncer" que:
Na verdade, isso era tão rápido que costumava quebrar o watchdog no Linux devido a um evento estranho acontecendo em um diretório excluído, então eu consertei o upstream.
Mas, isso é um problema em relação a um único corredor acionado por um evento. É um aplicativo (como o comando watchmedo shell-command
). Se quiséssemos ter ações distintas para eventos distintos, com algumas delas talvez rodando em paralelo, seria um erro filtrar os eventos que estão próximos no tempo. Dito isso, o problema não está na biblioteca watchdog
, mas em watchmedo
.
Eu tive o mesmo problema e uma solução rápida foi usar flock -n test.lock CMD
para garantir que o processo só pudesse ser executado uma vez
Comentários muito úteis
Eu tive o mesmo problema e uma solução rápida foi usar
flock -n test.lock CMD
para garantir que o processo só pudesse ser executado uma vez