Ajout d'une commande de sortie à l'outil de script ArcGIS Python?


8

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.


4
@Maddison Je n'ai pas essayé cela, donc je n'ai pas publié de réponse, mais je pense que vous devriez consulter la rubrique d'aide d'ArcGIS Comprendre le comportement d'annulation dans les outils de script .
user2856

Pouvez-vous modifier votre question et spécifier la version d'ArcGIS Desktop que vous utilisez, s'il vous plaît. Voir aussi gis.stackexchange.com/q/172598/2856
user2856

Merci pour les liens et je mettrai à jour la question maintenant.
Maddison Lussin

Réponses:


2

Jetez un oeil ici .

En bref, votre code devrait ressembler à ceci:

 # Start of code

 try:
      #for loop
 except KeyboardInterrupt:
      pass

 #Rest of code

Selon la question liée au débordement de pile, Ctrl-C devrait fonctionner pour désactiver KeyboardInterrupt.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.