Parameter der Skriptwerkzeuge

Fast alle Werkzeuge verfügen über Parameter, deren Werte im Werkzeugdialogfeld oder innerhalb eines Skripts festgelegt werden. Sobald das Werkzeug ausgeführt wird, werden die Parameterwerte an das Skript übergeben. Das Skript liest die Werte und setzt dann seine Arbeit fort.

Die folgende Abbildung zeigt das Dialogfeld eines Skriptwerkzeugs mit drei Parametern: einem Eingabe-Workspace, einer Clip-Feature-Class und einem Ausgabe-Workspace. Alle Feature-Classes im Eingabe-Workspace werden mit dem Werkzeug Ausschneiden auf die Clip-Feature-Class zugeschnitten und in den Ausgabe-Workspace geschrieben.

Skriptwerkzeugparameter

Nachdem die Parameterwerte im Werkzeugdialogfeld eingegeben wurden und auf die Schaltfläche OK geklickt wurde (siehe Abbildung oben), liest das Skript die Werte der Parameter mit der GetParameterAsText()-Methode wie folgt:

# Import arcpy site-package
#
import arcpy
from arcpy import env

# Read the parameter values:
#  1: input workspace
#  2: input clip features
#  3: output workspace
#
inWorkspace   = arcpy.GetParameterAsText(0)
clipFeatures  = arcpy.GetParameterAsText(1)
outWorkspace  = arcpy.GetParameterAsText(2)
env.workspace = inWorkspace

Übereinstimmende Reihenfolge der Parameter

Die Reihenfolge der Parameter im Werkzeugdialogfeld muss mit der Reihenfolge der Parameter im Skript übereinstimmen. Wenn Sie im Skriptwerkzeug für Clip-Features beispielsweise Parameter 2 in Parameter 1 ändern, müssen Sie auch die Parameterreihenfolge in den Eigenschaften des Skriptwerkzeugs ändern.

"sys.argv" und "arcpy.GetParameterAsText"

Es gibt zwei Methoden zum Lesen von Parametern: sys.argv und die ArcPy-Funktion GetParameterAsText(). Sie können beide Ansätze verwenden. Das obige Beispiel kann für die Verwendung der sys.argv-Methode umgeschrieben werden:

# Read the parameter values:
#  1: input workspace
#  2: input clip features
#  3: output workspace
#
inWorkspace   = sys.argv[1]
clipFeatures  = sys.argv[2]
outWorkspace  = sys.argv[3]
env.workspace = inWorkspace
HinweisHinweis:

Bei sys.argv ist die Länge eines Parameters auf 1024 Zeichen begrenzt. GetParameterAsText() hat keine Zeichenbegrenzung. Schon aus diesem Grund empfiehlt sich die Verwendung der GetParameterAsText()-Methode.

Bei sys.argv[] wird von 1 ausgehend gezählt (d. h. der erste Parameter ist 1), bei GetParameterAsText dagegen von 0 (d. h. der erste Parameter ist 0).

Ältere VersionenÄltere Versionen:

In Versionen vor ArcGIS 9.2 konnte bei eigenständigen Skripten, d. h. bei Skripten, die über die Eingabeaufforderung des Betriebssystems ausgeführt werden, nur die sys.argv-Methode verwendet werden. Die GetParameterAsText()-Methode stand nur bei Skriptwerkzeugen zur Verfügung. Diese Einschränkung ist seit Version 9.2 aufgehoben. Es kann sein, dass Sie auf Codebeispiele treffen, in denen die sys.argv-Methode verwendet wird. Diese Beispiele wurden vor Version 9.2 geschrieben. Bei Version 9.2 und höher können Sie GetParameterAsText() durch sys.argv ersetzen. Sie müssen lediglich darauf achten, dass der Parameterindexwert verringert werden muss: sys.argv[1] wird zu GetParameterAsText(0).

Parameterdatentypen

Jedem Skriptwerkzeugparameter ist ein Datentyp zugewiesen. Wenn Sie das Dialogfeld des Skriptwerkzeugs öffnen, überprüft die Geoverarbeitung den Parameterwert anhand des Datentyps. Wenn Sie etwa eine Feature-Class für einen Parameter mit einem Workspace-Datentyp eingeben, erzeugt die Geoverarbeitung wie unten zu sehen einen Fehler (ein rotes "X" im Dialogfeld).

Die Geoverarbeitung generiert einen Fehler, wenn Datentypen nicht übereinstimmen

Der Datentyp wird auch bei der Suche nach Daten verwendet. Im Dialogfeld für die Suche werden nur Daten angezeigt, die mit dem Datentyp des Parameters übereinstimmen.

Durchsuchen basierend auf dem Datentyp

Sie können sich das Verhältnis zwischen Parametern und Datentypen auch folgendermaßen vorstellen: Die Geoverarbeitung sendet keine Werte an das Skript, die den falschen Datentyp aufweisen. Dies ist einer der Vorteile von Skriptwerkzeugen: Der Parameterwert wird anhand des Parameterdatentyps überprüft, bevor der Wert an das Skript übermittelt wird.


7/10/2012