J'ai un outil de script SIG qui crée une copie d'un mxd, définit une requête de définition et exporte un ensemble de pages pilotées par les données en fonction de la requête de définition. Une fois l'exportation terminée, il supprime la copie mxd, certaines variables et un tas de connexions à la base de données.
Existe-t-il un moyen de coder un code d'échappement qui annulerait les exportations de pages pilotées par les données où qu'elles se trouvent, mais au lieu d'annuler tout le script, il irait juste à la fin et supprimerait toujours la copie mxd, etc. Le bloc de code ressemble à quelque chose comme cette:
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)
Fondamentalement, je veux pouvoir appuyer sur la touche "Q" (ou n'importe quelle autre clé) et la boucle d'exportation pdf se briserait et le bloc del / Delete_management continuerait de fonctionner. Je ne pense pas que ce soit possible car il exécute le script via un outil, mais je me suis dit que je verrais si c'était comme cela m'empêcherait de supprimer manuellement les choses si je décidais d'arrêter l'exportation tôt.
J'utilise ArcGIS Desktop 10.4.
la source
Réponses:
Jetez un oeil ici .
En bref, votre code devrait ressembler à ceci:
Selon la question liée au débordement de pile, Ctrl-C devrait fonctionner pour désactiver KeyboardInterrupt.
la source