Exit-Befehl zum ArcGIS Python-Skript-Tool hinzufügen?

8

Ich habe ein GIS-Skript-Tool, das eine Kopie eines mxd erstellt, eine Definitionsabfrage festlegt und eine Reihe datengesteuerter Seiten basierend auf der Definitionsabfrage exportiert. Nach dem Export werden die mxd-Kopie, einige Variablen und eine Reihe von Datenbankverbindungen gelöscht.

Gibt es eine Möglichkeit, einen Escape-Code zu codieren, der die datengesteuerten Seitenexporte abbricht, wo immer sie sich befinden, aber anstatt das gesamte Skript abzubrechen, würde er einfach zum Ende springen und trotzdem die mxd-Kopie usw. löschen. Der Codeblock sieht ungefähr so ​​aus diese:

    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)

Grundsätzlich möchte ich in der Lage sein, die Taste "Q" (oder eine beliebige Taste) zu drücken, und die PDF-Exportschleife würde unterbrochen und der Block del / Delete_management würde weiterhin ausgeführt. Ich denke nicht, dass es möglich ist, da das Skript über ein Tool ausgeführt wird, aber ich dachte, ich würde sehen, ob es so ist, als würde es mich davon abhalten, Dinge manuell zu löschen, wenn ich mich entscheide, den Export vorzeitig zu stoppen.

Ich verwende ArcGIS Desktop 10.4.

Maddison Lussin
quelle
4
@Maddison Ich habe dies nicht versucht, daher keine Antwort zu veröffentlichen, aber ich denke, Sie sollten sich das ArcGIS-Hilfethema Grundlegendes zum Abbruchverhalten in Skript-Tools ansehen .
user2856
Können Sie Ihre Frage bearbeiten und angeben, welche Version von ArcGIS Desktop Sie verwenden? Siehe auch gis.stackexchange.com/q/172598/2856
user2856
Vielen Dank für die Links und ich werde die Frage jetzt aktualisieren.
Maddison Lussin

Antworten:

2

Schauen Sie hier .

Kurz gesagt, Ihr Code sollte folgendermaßen aussehen:

 # Start of code

 try:
      #for loop
 except KeyboardInterrupt:
      pass

 #Rest of code

Gemäß der verknüpften Stapelüberlauffrage sollte Strg-C funktionieren, um KeyboardInterrupt auszulösen.

PT Curran
quelle