¿Agregar comando de salida a la herramienta de script ArcGIS Python?

8

Tengo una herramienta de script GIS que crea una copia de un mxd, establece una consulta de definición y exporta un conjunto de páginas basadas en datos basadas en la consulta de definición. Una vez que finaliza la exportación, elimina la copia mxd, algunas variables y un montón de conexiones de bases de datos.

¿Hay alguna forma de codificar un código de escape que cancele las exportaciones de páginas controladas por datos donde sea que estén, pero en lugar de cancelar todo el script, simplemente saltaría al final y aún eliminaría la copia mxd, etc. El bloque de código se parece a algo como esta:

    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)

Básicamente quiero poder presionar la tecla "Q" (o cualquier tecla) y el bucle de exportación de pdf se rompería y el bloque del / Delete_management aún se ejecutaría. No creo que sea posible ya que está ejecutando el script a través de una herramienta, pero pensé que vería si era así, ya que me impediría tener que eliminar manualmente las cosas si decido detener la exportación antes.

Estoy usando ArcGIS Desktop 10.4.

Maddison Lussin
fuente
44
@Maddison No lo he intentado, así que no publico una respuesta, pero creo que debería echar un vistazo al tema de Ayuda de ArcGIS Comprensión del comportamiento de cancelación en las herramientas de script .
usuario2856
¿Puede editar su pregunta y especificar qué versión de ArcGIS Desktop está utilizando, por favor? Consulte también gis.stackexchange.com/q/172598/2856
user2856 el
Gracias por los enlaces y actualizaré la pregunta ahora.
Maddison Lussin

Respuestas:

2

Echa un vistazo aquí .

En resumen, su código debería verse así:

 # Start of code

 try:
      #for loop
 except KeyboardInterrupt:
      pass

 #Rest of code

De acuerdo con la pregunta de desbordamiento de pila vinculada, Ctrl-C debería funcionar para activar KeyboardInterrupt.

PT Curran
fuente