Adicionando comando de saída à ferramenta de script ArcGIS Python?

8

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.

Maddison Lussin
fonte
4
@ Maddison Eu não tentei isso, então não postei uma resposta, mas acho que você deve dar uma olhada no tópico de Ajuda do ArcGIS Noções básicas sobre o comportamento de cancelamento em ferramentas de script .
precisa saber é o seguinte
Você pode editar sua pergunta e especificar qual versão do ArcGIS Desktop você está usando, por favor. Veja também gis.stackexchange.com/q/172598/2856
user2856
Obrigado pelos links e vou atualizar a pergunta agora.
Maddison Lussin 31/08/19

Respostas:

2

Dê uma olhada aqui .

Em resumo, seu código deve ficar assim:

 # Start of code

 try:
      #for loop
 except KeyboardInterrupt:
      pass

 #Rest of code

De acordo com a pergunta de estouro de pilha vinculada, Ctrl-C deve funcionar para ativar o KeyboardInterrupt.

PT Curran
fonte