Eu tenho uma ferramenta de script GIS que cria uma cópia de um mxd, define uma consulta de definição e exporta um conjunto de páginas controladas por dados com base na consulta de definição. Após terminar a exportação, ele exclui a cópia do mxd, algumas variáveis e várias conexões com o banco de dados.
Existe alguma maneira de codificar um código de escape que cancele as exportações de páginas controladas por dados onde quer que estejam, mas, em vez de cancelar o script inteiro, ele apenas salta para o final e ainda exclui a cópia do mxd etc. O bloco de código se parece com isto:
mxd = arcpy.mapping.MapDocument(mxd_master)
mxd_folder = os.path.dirname(mxd_master)
mxd_copy = mxd_folder + "\\WORKING.mxd"
mxd.saveACopy(mxd_copy)
mxd = arcpy.mapping.MapDocument(mxd_copy)
ddp = mxd.dataDrivenPages
for page_num in range (1, ddp.pageCount + 1):
ddp.currentPageID = page_num
row = ddp.pageRow
mapsheet = row.getValue(ddp.pageNameField.name)
arcpy.mapping.ExportToPDF(pdf export parameters....)
del mxd, mxd_master
arcpy.Delete_management(mxd_copy)
Basicamente, eu quero poder pressionar a tecla "Q" (ou qualquer outra chave) e o loop de exportação do pdf será interrompido e o bloco del / Delete_management ainda será executado. Eu não acho que seja possível, pois ele está executando o script por meio de uma ferramenta, mas achei que veria se fosse assim, pois me impediria de excluir manualmente as coisas se eu decidir interromper a exportação mais cedo.
Estou usando o ArcGIS Desktop 10.4.
fonte
Respostas:
Dê uma olhada aqui .
Em resumo, seu código deve ficar assim:
De acordo com a pergunta de estouro de pilha vinculada, Ctrl-C deve funcionar para ativar o KeyboardInterrupt.
fonte