Como se quebra a execução de um processo de longa execução no console python do ArcMap?
Por exemplo, como você interrompe uma iteração longa como a abaixo, uma vez iniciada?
for i in range(1, 50):
# some long process which takes over a minute to complete
Quero interromper o processo a qualquer momento pressionando uma combinação de teclado, clicando em um botão ou algo semelhante enquanto o código que eu inseri na janela do console estiver em execução .
arcpy
arcmap
python-window
Alex Essilfie
fonte
fonte
Respostas:
Apenas testei e ESC também não funciona. O ArcGIS congela por um momento e depois continua. Não parece haver uma maneira de forçar o encerramento, uma vez que é executado no console do ArcGIS Python. Você não pode matá-lo usando o Gerenciador de Tarefas, pois o processo Python não aparece lá.
Se você realmente deseja forçar o encerramento, considere usar um IDE como IDLE em vez de fazê-lo no console do ArcGIS Python. No IDLE, por exemplo, você pode usar Ctrl+ Zou Ctrl+ Cpara finalizar a execução.
fonte
Este é o método que eu uso:
exemplo de um arquivo kill_processx.py:
fonte
É uma prática ruim forçar o desligamento usando táticas de força bruta. Em vez disso, como o @Aragon apontou, você deve adicionar tratamento de erros ao seu script para isolar componentes e / ou interromper o script se determinadas condições não forem atendidas. Como o @RK aponta, o console python do ArcGIS é praticamente inútil para a execução de scripts complexos e, na prática, deve ser reservado para operações simples - fique com o IDLE , pythonwin , pyscripter ou qualquer outro host de outros IDEs. Aqui estão as discussões relacionadas à sua pergunta:
Como uso o sys.exit (0) em um script arcpy para sair mais cedo sem que seja exibida uma mensagem de erro?
Terminando um script Python
Como parar um comando ou prompt no Python?
fonte
Estou trabalhando na versão 10.4 e descobri que posso clicar no X próximo enquanto um script está em execução. O ArcMap perguntará se eu quero cancelar uma operação.
Eu clico em Sim. O ArcMap então me pergunta se eu quero salvar antes de sair. Eu clico em Cancelar. O script lança uma interrupção no teclado.
fonte
Se você deseja resolver de maneira pitônica, tente o seguinte:
ou use:
em detalhe:
espero que ajude você ...
fonte
sys.exit()
mas isso não funciona quando um loop ou um processo similarmente longo está em execução.Pelo menos no ArcMap 10.4, você pode fazer isso. Verifique se a janela "Resultados" está visível. (Se não o encontrar em "Geoprocessamento"). Agora, se você tiver um comando em execução, ele será exibido nesta janela. Clique com o botão direito e pressione "Cancelar".
fonte
E se, em cada linha de código, você adicionar um
if
que verifiqueif input()=="what ever you want in here"
o usosys.exit
.Por exemplo: https://repl.it/@kquazi_tcsp/JumpyNaturalMetadata
fonte
Usando o IDLE, tenho um arquivo chamado "stop.py" que contém a única linha: "pass". Mantenha esse arquivo aberto no IDLE enquanto outro script .py estiver em execução. Clicar em F5 na janela "stop.py" redefine o IDLE.
fonte