Revisar y probar una secuencia de comandos
Las secuencias de comandos Python se pueden utilizar para automatizar tareas en ArcGIS Pro. Puede compartir con otros las secuencias de comandos que haya creado como archivo Python .py. Sin embargo, para utilizar una secuencia de comandos escrita por otra persona es necesario tener ciertos conocimientos de Python, aunque solo sea para cambiar los nombres de los datasets que se van a procesar. Para compartir una secuencia de comandos Python en un formato más fácil de utilizar, puede crear una herramienta de secuencias de comandos Python.
Una herramienta de secuencias de comandos Python permite proporcionar la secuencia de comandos Python con una interfaz fácil de usar que se parece a las herramientas estándar de geoprocesamiento. Puede hacer que su herramienta de secuencias de comandos se comporte como una herramienta de geoprocesamiento estándar agregando código para validar las entradas del usuario y devolver mensajes al usuario. También puede incluir documentación de ayuda integrada para explicar cómo utilizar la herramienta y configurar sus parámetros.
La creación de herramientas de secuencias de comandos facilita compartir la funcionalidad de una secuencia de comandos Python con otros usuarios. Las secuencias de comandos Python se pueden integrar en un archivo de caja de herramientas personalizado (.atbx), lo que simplifica su compartición.
Abrir un proyecto y revisar los datasets
En primer lugar, descargará los datos del tutorial, abrirá un proyecto existente y revisará los datos que procesará la herramienta.
- Descargue el archivo PythonTool.zip de este tutorial y localícelo en su equipo.
Nota:
La mayoría de los navegadores web descargan archivos de manera predeterminada en la carpeta Downloads del equipo.
- Haga clic con el botón derecho en el archivo PythonTool.zip y extráigalo en la carpeta C:\Tutorials\.
Nota:
Si aún no tiene esta carpeta en su equipo, puede crearla y extraer en ella el archivo zip. También puede extraerlo en otra ubicación, sin embargo, en las instrucciones y la secuencia de comandos se utiliza la ruta C:\Tutorials. Si coloca la carpeta PythonTool en una ubicación diferente, tendrá que actualizar la secuencia de comandos script para que apunte a la ruta de su carpeta.
- Inicie ArcGIS Pro e inicie sesión en ArcGIS Online.
Nota:
Si no tiene acceso a ArcGIS Pro o una cuenta de organización de ArcGIS, consulte las opciones de acceso a software.
- En ArcGIS Pro, haga clic en Abrir otro proyecto.

- En la ventana Abrir proyecto, vaya a la carpeta PythonTool, haga clic en Python Tool.aprx y luego en Aceptar.

Se abrirá el proyecto.

El mapa muestra varias clases de entidades del área de Washington, D.C.
- Si el panel Catálogo no está visible, en la cinta, haga clic en la pestaña Vista y luego en Panel Catálogo.
- En el panel Catálogo, expanda Carpetas y PythonTool.
- Expanda la geodatabase DC.gdb.

La geodatabase contiene ocho clases de entidades. Algunas son capas del mapa. La carpeta PythonTool contiene un shapefile denominado neighborhood.shp que también está presente en el mapa.
Supongamos que trabaja en una oficina municipal y recibe periódicamente solicitudes de extractos de datos de barrios concretos de la ciudad. Para completar esta tarea, es necesario recortar todas las clases de entidades de la geodatabase en una vecindad y almacenar las clases de entidades recortadas en una nueva geodatabase. Esta nueva geodatabase debe comprimirse en un archivo ZIP para poder compartirla fácilmente o utilizarla como copia de seguridad.
Puede llevar a cabo estas tareas en ArcGIS Pro utilizando la herramienta Crear geodatabase de archivos para crear la nueva geodatabase y ejecutando la herramienta Recortar varias veces, una vez para cada clase de entidad. Luego puede crear el archivo ZIP desde File Explorer o bien utilizar una utilidad de compresión. Este proceso puede ser engorroso y llevar mucho tiempo, sobre todo si es preciso procesar muchas clases de entidades.
Dado que se trata de una tarea habitual, tiene sentido automatizarla. Con el proyecto se incluye una secuencia de comandos para automatizar la tarea. Revisará y probará esta secuencia de comandos independiente y, a continuación, creará una herramienta de secuencias de comandos Python basada en ella.
Revisar y probar una secuencia de comandos Python
En primer lugar, abrirá la secuencia de comandos y revisará su contenido.
- En File Explorer, vaya a la carpeta C:\Tutorials\PythonTool.
- Haga clic con el botón derecho en el archivo de secuencia de comandos clip_zip.py de Python y elija Editar con IDLE (ArcGIS Pro).

Nota:
Si también tiene instalado ArcGIS Desktop 10.x (ArcMap), el menú contextual también incluirá el acceso directo Editar con IDLE. No use este acceso directo, ya que no abre la versión correcta de Python.
Si utiliza Windows 11 y la opción Editar con IDLE (ArcGIS Pro) no aparece, haga clic en Mostrar más opciones y elija Editar con IDLE (ArcGIS Pro).
La secuencia de comandos se abre en IDLE, el editor predeterminado de Python.

La secuencia de comandos comienza con las importaciones:
import arcpy import os import zipfileEstas líneas importan módulos que la secuencia de comandos utilizará.
ArcPy se necesita para ejecutar herramientas de geoprocesamiento y tareas relacionadas, el módulo os es necesario para manipular rutas y el módulo zipfile es necesario para crear un archivo ZIP.
La siguiente parte de la secuencia de comandos configura el espacio de trabajo y las rutas para los datasets de entrada y salida. Sin los comentarios, queda como sigue:
arcpy.env.workspace = "C:/Tutorials/PythonTool/DC.gdb" clip_fc = "C:/Tutorials/PythonTool/neighborhood.shp" gdb = "C:/Tutorials/PythonTool/Clip.gdb" gdb_path, new_gdb = os.path.split(gdb) gdb = "C:/Tutorials/PythonTool/Clip.zip" arcpy.env.overwriteOutput = TrueEl espacio de trabajo se establece en la geodatabase DC.gdb, que contiene las clases de entidades que deben recortarse. La clase de entidad neighborhood.shp se utilizrá como entidades de recorte. La secuencia de comandos creará la geodatabase Clip.gdb, que contendrá la salida de la herramienta Recortar. La ruta completa de la geodatabase se divide en la carpeta, C:\Tutorials\PythonTool, y el nombre de el nombre de la geodatabase, Clip.gdb, mediante os.path.split(). Se necesitan como variables separadas más adelante en la secuencia de comandos. El archivo ZIP Clip.zip incluirá todo el contenido de la geodatabase Clip.gdb
Todos los datasets residen en la misma carpeta, pero no es necesario que sea así para que la secuencia de comandos funcione. Por ejemplo, la nueva geodatabase podría crearse en otra carpeta.
Lo siguiente en la secuencia de comandos es la creación de la nueva geodatabase. Un mensaje confirma que se ha creado la nueva geodatabase.
arcpy.CreateFileGDB_management(gdb_path, new_gdb) print(f"Output geodatabase {gdb} created")En la siguiente sección se ejecuta la herramienta Recortar:
inputs = arcpy.ListFeatureClasses() for fc in inputs: fc_name = arcpy.da.Describe(fc)["baseName"] new_fc = os.path.join(gdb, fc_name) arcpy.analysis.Clip(fc, clip_fc, new_fc) print(f"Output feature class {new_fc} created")La función ListFeatureClasses() devuelve todas las clases de entidad del espacio de trabajo, que es la geodatabase DC.gdb. En el bucle for siguiente, se obtiene el nombre base de la clase de entidad. Aunque esto no es estrictamente necesario en este ejemplo, permite que la secuencia de comandos sea más sólida, ya que elimina cualquier extensión de archivo, como .shp cuando las entradas son shapefiles. La ruta completa de la clase de entidad de salida se crea mediante os.path.join(). Esto es necesario ya que la salida debe terminar en la geodatabase Clip.gdb, no en el espacio de trabajo. Se ejecuta la herramienta Clip y se muestra un mensaje en el que se confirma que se ha creado la nueva clase de entidad. Estos pasos se repiten para cada clase de entidad de la lista.
La última sección crea el archivo ZIP:
with zipfile.ZipFile(out_zip, "w") as myzip: for f in os.listdir(gdb): if not f.endswith(".lock"): file_name = os.path.join(gdb, f) arc_name = os.path.join(new_gdb, f) myzip.write(file_name, arc_name)Se crea un nuevo archivo ZIP vacío mediante zipfile.ZipFile(). En este caso se utiliza una declaración with para crear y abrir el archivo, al tiempo que se garantiza que el archivo se cierra una vez finalizado el procesamiento. El contenido de la geodatabase se determina mediante os.listdir(), que devuelve una lista de todos los archivos dentro de la carpeta de la geodatabase. Los archivos con la extensión .lock se omiten. El resto de los archivos se escriben en el archivo ZIP. La variable file_name representa la ruta completa de cada archivo en la geodatabase original. La variable arc_name representa cada uno de los archivos que se va a escribir en el archivo ZIP, pero solo incluye el nombre de la geodatabase y el nombre del archivo. Esto reproduce cómo se crearía manualmente un archivo ZIP en File Explorer.
Después de revisar la secuencia de comandos, se preparará para probarla.
- En IDLE, observe las rutas utilizadas al principio de la secuencia de comandos.
Si copió la carpeta del tutorial en una ubicación distinta de C:/Tutorials/PythonTool/, tendrá que obtener la ruta a los datos mediante File Explorer.
- Edite las cuatro rutas de esta sección:
arcpy.env.workspace = "C:/Tutorials/PythonTool/DC.gdb" clip_fc = "C:/Tutorials/PythonTool/neighborhood.shp" gdb = "C:/Tutorials/PythonTool/Clip.gdb" gdb_path, new_gdb = os.path.split(gdb) gdb = "C:/Tutorials/PythonTool/Clip.zip" arcpy.env.overwriteOutput = TrueNota:
Las rutas de la secuencia de comandos utilizan la barra oblicua (/) como separador de rutas. Si copia una ruta desde File Explorer, utilizará el carácter separador de rutas \ predeterminado de Windows. Deberá cambiar todos los caracteres de barra invertida por barras diagonales en la secuencia de comandos.
Las rutas completas codificadas se encuentran solo en la parte superior de la secuencia de comandos, donde se asignan a variables. En el resto de la secuencia de comandos se utilizan estas variables. Las rutas completas y los nombres de los archivos no se repiten más allá de esta sección superior. Esta estrategia hace que sea más fácil identificar lo que puede ser necesario cambiar, y será útil al adaptar la secuencia de comandos para utilizarla como una herramienta de secuencia de comandos Python más adelante en este tutorial.
- En IDLE, haga clic en Archivo y elija Guardar para guardar los cambios realizados en la secuencia de comandos.

- En IDLE, haga clic en Ejecutar y elija Ejecutar módulo para ejecutar la secuencia de comandos.

La secuencia de comandos se ejecuta. Aparece la ventana de shell IDLE y la secuencia de comandos muestra mensajes de progreso a medida que va procesando los datos.

Nota:
Es posible que aparezcan mensajes de error si no ha modificado correctamente las rutas. Por ejemplo, si el espacio de trabajo no está bien configurado, la lista denominada inputs está vacía y la secuencia de comandos devuelve el siguiente error:
TypeError: ‘NoneType' object is not iterable
O bien, si la ruta de la geodatabase Clip.gdb es incorrecta, la secuencia de comandos devuelve el siguiente error:
ERROR 000732: File GDB Location: Dataset … does not exist or is not supported
Estos errores ilustran la dificultad de compartir secuencias de comandos. Crear una herramienta de secuencia de comandos es una buena forma de prevenir este tipo de errores.
Si la secuencia de comandos se ejecuta correctamente, los mensajes confirman que se han creado la geodatabase y las clases de entidades recortadas. Comprobará que se crearon usando ArcGIS Pro y File Explorer.
- En ArcGIS Pro, en el panel Catálogo, haga clic con el botón derecho en la carpeta PythonTool y elija Refrescar.

- En el panel Catálogo, en la carpeta PythonTool, verifique que se ha creado la geodatabase Clip.gdb.

- Expanda la geodatabase Clip.gdb.

- En la geodatabase Clip.gdb, haga clic con el botón derecho en bike_racks y elija Agregar al mapa actual.

La nueva capa bike_racks recortada se agrega al mapa. Se ha recortado a los límites del barrio.

Esta capa muestra que la secuencia de comandos ha funcionado. Esta capa bike_racks se puede eliminar.
- En el panel Contenido, haga clic con el botón derecho en la capa bike_racks recortada y elija Eliminar.
También eliminará la geodatabase Clip.gdb. Volverá a crear esta geodatabase cuando ejecute su herramienta de secuencia de comandos más adelante en este tutorial.
- En el panel Catálogo, haga clic con el botón derecho en Clip.gdb y elija Eliminar.
- En File Explorer, vaya a la carpeta C:\Tutorials\PythonTool.
El archivo Clip.zip se agrega a la carpeta.

Creará este archivo .zip de nuevo más adelante con la herramienta de secuencia de comandos. Se puede eliminar.
- Haga clic con el botón derecho en Clip.zip y elija Eliminar.
La secuencia de comandos independiente funciona de la forma esperada. Si desea utilizar la secuencia de comandos para diferentes datasets, puede abrir la secuencia de comandos y modificar las rutas. Es un proceso que no resulta muy fácil para personas no familiarizadas con la creación de secuencias de comandos Python. Además, es fácil cometer errores al modificar las rutas en la secuencia de comandos. A continuación, desarrollará una herramienta de secuencias de comandos de Python con una interfaz fácil de utilizar.
Crear una herramienta y agregar parámetros
La siguiente fase del proceso consiste en crear una herramienta de secuencias de comandos y configurar sus parámetros para establecer la interfaz de usuario de la herramienta.
Crear una caja de herramientas y una herramienta de secuencias de comandos
Las herramientas de secuencias de comandos Python se crean en ArcGIS Pro. Se almacenan en una caja de herramientas personalizada. A continuación, creará una caja de herramientas personalizada en su proyecto y le agregará una herramienta de secuencias de comandos.
- En ArcGIS Pro, en el panel Catálogo, haga clic con el botón derecho en la carpeta PythonTool, apunte a Nuevo y elija Toolbox (.atbx).

Se crea la caja de herramientas.

- Escriba Recortar_y_comprimir como nombre de la caja de herramientas y pulse Intro.

Se ha cambiado el nombre de la caja de herramientas.
Nota:
En versiones anteriores de ArcGIS Pro se utilizaba el formato .tbx. Puede seguir utilizando cajas de herramientas antiguas en este formato, no obstante, al crear cajas de herramientas, debe utilizar el formato .atbx a partir de ArcGIS Pro 3.0.
- Haga clic con el botón derecho en la caja de herramientas Recortar_y_comprimir, apunte a Nuevo y elija Secuencia de comandos.

Aparece la ventana Nueva secuencia de comandos.

Esta ventana se utiliza para establecer las propiedades generales de la herramienta, configurar sus parámetros, introducir el código de ejecución y agregar el código de validación. Completará todos estos pasos en el resto de este tutorial. Por ahora, especificará el nombre, la etiqueta y la descripción de la herramienta de secuencias de comandos.
- En Nombre, escriba RecortaryComprimir.
El nombre de la herramienta es el nombre de identificación interno y único que utiliza la herramienta. El nombre solo puede contener letras y números. No se admiten espacios ni caracteres especiales.
- En Etiqueta, escriba Recortar y comprimir.
La etiqueta de la herramienta es el nombre descriptivo de la herramienta en la caja de herramientas, y se muestra cuando la herramienta está abierta en el cuadro de diálogo de herramientas. La etiqueta puede tener espacios y caracteres especiales.
En el siguiente parámetro, Caja de herramientas, se encuentra la herramienta de secuencias de comandos. La ruta y el nombre de la caja de herramientas se muestran en función de la ubicación del archivo .atbx y no pueden modificarse en la ventana. Es importante reconocer que la herramienta de secuencias de comandos no es un archivo independiente, sino que forma parte del archivo .atbx.
- En el cuadro Descripción, escriba Esta herramienta de secuencias de comandos le permite seleccionar múltiples capas de entidades o clases de entidades y recortarlas utilizando una o más entidades de polígono. Los resultados se almacenan en una nueva geodatabase y se crea un archivo ZIP de esta nueva geodatabase para simplificar el proceso de compartir o realizar copias de seguridad.

- Haga clic en Aceptar.
La herramienta de secuencias de comandos se crea con las propiedades generales que ha introducido.
- En el panel Catálogo, en la caja de herramientas Recortar_y_comprimir, haga doble clic en la herramienta Recortar y comprimir.

La herramienta de secuencias de comandos se abre en el panel Geoprocesamiento. Dispone del marco de una herramienta de geoprocesamiento, pero sigue estando vacía en su mayor parte.

- Cierre la herramienta.
Agregar el parámetro de la capa de entidades de entrada
Configurar cuidadosamente los parámetros de la herramienta es una parte fundamental de la creación de una herramienta de secuencias de comandos Python. Los parámetros de la herramienta definen la interfaz de usuario de la misma, que permite al usuario de la herramienta introducir los datos y otros valores que serán procesados por la secuencia de comandos.
Primero agregará el parámetro de la capa de entidades de entrada.
- Haga clic con el botón derecho en la herramienta Recortar y comprimir y elija Propiedades.

Aparece la ventana Propiedades de la herramienta: Recortar y comprimir. En ella puede ver sus entradas anteriores en la pestaña General.
- Haga clic en la pestaña Parámetros.

En esta pestaña configurará los parámetros de la herramienta. Los parámetros de la herramienta se organizan en una tabla en la que cada fila es un parámetro y las columnas son las propiedades de cada parámetro.

Utilizará esta tabla para crear los siguientes parámetros:
- Capas de entidades de entrada: el usuario puede seleccionar cualquier capa de entidades del mapa activo, o navegar a cualquier clase de entidad del disco.
- Polígonos de recorte: el usuario puede seleccionar una capa de entidades de polígono, buscar una clase de entidades de polígono en el disco o crear un conjunto de entidades en el mapa activo formadas por polígonos.
- Geodatabase de salida: el usuario puede especificar la ruta y el nombre de archivo de una nueva geodatabase para almacenar los resultados.
- Archivo ZIP de salida: el usuario puede especificar la ruta y el nombre del archivo ZIP que se creará con el contenido de la geodatabase.
- En la columna Etiqueta, escriba Capas de entidades de entrada y pulse Intro.

La etiqueta del parámetro es la etiqueta de fácil lectura del parámetro, que se muestra en el panel de herramientas. El nombre del parámetro se rellena automáticamente a partir de la etiqueta, sustituyendo los espacios por guiones bajos. El nombre del parámetro se utiliza internamente en la herramienta de secuencias de comandos, y se puede utilizar al establecer los parámetros de la herramienta en una secuencia de comandos Python.
- En la columna Tipo de datos, haga clic en el botón Cambiar tipo de datos.

Aparece la ventana Tipo de datos del parámetro. El valor predeterminado es Cadena de caracteres, pero lo cambiará a Capa de entidades.
- Haga clic en la lista desplegable de tipos de datos, desplácese hasta la sección F y elija Capa de entidades.

Establecer el tipo de datos en Capa de entidades permite al usuario seleccionar capas de entidades en el mapa activo utilizando una lista desplegable en la herramienta, o buscar clases de entidades en el disco.
La herramienta debe poder aceptar varias capas de entidades de entrada.
- Seleccione Varios valores.

Seleccionar Varios valores significa que el usuario puede seleccionar una o más entradas para este parámetro de la herramienta. Puede tratarse de una combinación de capas de entidades y clases de entidades.
- Haga clic en Aceptar para cerrar la ventana Tipo de datos del parámetro.

- En Tipo, confirme que el valor esté configurado como Obligatorio.
Establecer el parámetro como Requerido significa que la herramienta no se puede ejecutar si el parámetro no se establece.
- En Dirección, confirme que el valor esté configurado como Entrada.
Establecer la dirección del parámetro en Entrada indica a la herramienta que se trata de una de las capas o valores de entrada que procesará. También permite utilizar la herramienta en ModelBuilder, donde las capas de entidades pueden conectarse a la herramienta como entradas.
El primer parámetro está completo. Con este único parámetro puede comprobar inmediatamente el aspecto de la herramienta de secuencia de comandos.
- En la ventana Propiedades de la herramienta, haga clic en Aceptar.
- En el panel Catálogo, en la caja de herramientas Recortar_y_comprimir, haga doble clic en la herramienta Recortar y comprimir.
La herramienta de secuencias de comandos se abre en el panel Geoprocesamiento. Se muestra el primer parámetro. Hay una lista desplegable para seleccionar capas de entidades del mapa activo y un botón de navegación para buscar clases de entidades en el disco. Un asterisco rojo delante de la etiqueta del parámetro indica que se trata de un parámetro obligatorio.

En esta fase, está configurando los parámetros de la herramienta y visualizando la interfaz de usuario de la herramienta para comprobar que los parámetros aparecen correctamente. Todavía no se puede probar si la herramienta funciona correctamente porque no se ha agregado el código Python.
Nota:
Si selecciona al menos una capa de entidades de entrada y ejecuta la herramienta, obtendrá un mensaje de error.
- Cierre la herramienta.
Agregar el parámetro Polígonos de recorte
A continuación, configurará el parámetro para los polígonos de recorte.
- Haga clic con el botón derecho en la herramienta Recortar y comprimir y elija Propiedades.
- En la pestaña Parámetros, en la segunda fila de la tabla, haga clic en la columna Etiqueta. Escriba Polígonos de recorte y pulse Intro.

El nombre del parámetro se actualiza a Recortar_Polígonos.
- En la columna Tipo de datos, haga clic en el botón Cambiar tipo de datos.
- En Tipo de datos, elija Conjunto de entidades.

Un conjunto de entidades es una representación ligera de una clase de entidad. En el contexto de una herramienta de geoprocesamiento, un conjunto de entidades permite a la herramienta aceptar entradas interactivas. Un usuario puede crear entidades dibujando en el mapa, de la misma forma que crearía entidades durante la edición utilizando el panel Crear entidades. El usuario también puede seleccionar capas de entidades del mapa activo o buscar clases de entidades en el disco.
- Haga clic en Aceptar.
- En Tipo, confirme que el valor esté configurado como Obligatorio. En Dirección, confirme que el valor esté configurado como Entrada.
A continuación, establecerá un filtro en este parámetro para que el parámetro Polígonos de recorte de la herramienta solo acepte entidades de polígono como entrada.
- Desplácese hacia la derecha y haga clic en la columna Filtro.

- Haga clic en la lista desplegable Filtro y seleccione Tipo de entidad.

Aparece la ventana Filtro de tipo de entidad.
- Seleccione Polígono.

Ahora, cuando alguien ejecuta la herramienta, solo se pueden utilizar polígonos para la geometría de recorte de entrada.
-
En la ventana Filtro de tipo de entidad, haga clic en Aceptar.
Ha configurado el parámetro Polígonos de recorte.
Agregar el parámetro de geodatabase de salida
A continuación, configurará el parámetro para la geodatabase de salida.
- En la pestaña Parámetros, en la tercera fila de la tabla, haga clic en la columna Etiqueta. Escriba Geodatabase de salida y pulse Intro.
- En la columna Tipo de datos, haga clic en el botón Cambiar tipo de datos.
- En Tipo de datos, elija Espacio de trabajo.

- Haga clic en Aceptar.
- En Tipo, confirme que el valor esté configurado como Obligatorio.
- Haga clic en la columna Dirección y elija Salida.

Establecer la dirección en Salida indica a la herramienta que esta es una de las salidas que producirá. También permite utilizar la herramienta en ModelBuilder, donde se generarán elementos de salida para la herramienta.
- Haga clic en la columna Filtro y elija Espacio de trabajo.

- En la ventana Filtro de espacio de trabajo, seleccione Base de datos local.

Establecer el filtro en Base de datos local significa que el usuario solo podrá especificar una geodatabase de archivos como entrada, no una geodatabase corporativa ni una carpeta.
- Haga clic en Aceptar.
Ha configurado el parámetro Geodatabase de salida.
Agregar el parámetro de archivo ZIP de salida
A continuación, configurará el parámetro para el archivo ZIP de salida.
- En la pestaña Parámetros, en la cuarta fila de la tabla, haga clic en la columna Etiqueta. Escriba Archivo ZIP de salida y pulse Intro.
- En la columna Tipo de datos, haga clic en el botón Cambiar tipo de datos.
- En Tipo de datos, elija Archivo.

Un archivo ZIP es un archivo, por lo que es el tipo de datos correcto.
- Haga clic en Aceptar.
- Haga clic en la columna Dirección y elija Salida.
- Haga clic en la columna Filtro y seleccione Archivo.

- En la ventana Filtro de archivo, en el cuadro Extensiones, escriba zip.

La extensión del archivo debe ser solo las letras de la extensión, sin incluir el punto separador de extensión del archivo. No escriba .zip. La extensión del archivo no distingue entre mayúsculas y minúsculas.
- Haga clic en Aceptar.
Ha agregado todos los parámetros de la herramienta.

- En la ventana Propiedades de la herramienta, haga clic en Aceptar.
Probar los parámetros
Ahora que ha creado todos los parámetros de la herramienta, probará el panel de herramientas para asegurarse de que los ajustes de cada parámetro funcionan según lo previsto.
- En el panel Catálogo, en la caja de herramientas Recortar_y_comprimir, haga doble clic en la herramienta Recortar y comprimir.
Se abre la herramienta Recortar y comprimir. Todos los parámetros configurados en los pasos anteriores aparecen ahora en el panel de herramientas.

- En Capas de entidades de entrada, elija bike_racks.

Aparece un segundo cuadro Capas de entidades de entrada debajo del de bike_racks, porque este parámetro de la herramienta admite varios valores.
- En Capas de entidades de entrada, haga clic en el botón Examinar.
- Navegue hasta la geodatabase DC.gdb. Haga clic en bike_routes y luego en Aceptar.

La clase de entidad bike_routes no se encontraba en el mapa, pero la agregó en la herramienta Recortar_y_comprimir.

Ha confirmado que un usuario puede seleccionar varias entradas, incluyendo capas de entidades del mapa activo y clases de entidad del disco.
- Haga clic en la herramienta de boceto Polígonos de recorte.

La entrada de boceto del conjunto de entidades está limitada a entidades de polígono, lo que impedirá que alguien intente recortar con entidades de punto o línea. A continuación, probará las salidas.
- En el cuadro Geodatabase de salida, escriba C:\Tutorials\PythonTool\Clip. Haga clic en el cuadro de texto Archivo ZIP de salida.

Al introducir la ruta de una carpeta, se activa un icono de alerta de error para el parámetro Geodatabase de salida.
- Apunte al icono de alerta de error.

Aparece un mensaje de error que indica que en la ubicación especificada no existe ninguna geodatabase o que se trata de un tipo de espacio de trabajo incorrecto. Además, si introduce una extensión de archivo incorrecta (por ejemplo, .fdb), esta cambia automáticamente a .gdb. Se produce una validación similar para el parámetro final.
- En el cuadro Archivo ZIP de salida, escriba C:\Tutorials\PythonTool\Clip. Haga clic en el cuadro de texto Geodatabase de salida.
La herramienta agrega la extensión de archivo .zip a Recortar.

- En el cuadro Archivo ZIP de salida, escriba C:\Tutorials\PythonTool\Clip.zipped. Haga clic en el cuadro Geodatabase de salida.
Si se introduce una ruta que termina en una extensión de archivo incorrecta, se activa un icono de alerta de error para el parámetro Archivo ZIP de salida.
- Apunte al icono de alerta de error.

El mensaje de error indica que se trata de un tipo de archivo incorrecto.
- Cierre la herramienta.
Las pruebas muestran que los filtros y otros parámetros que ha configurado funcionan. El diseño cuidadoso de los parámetros da como resultado una herramienta más sólida, ya que evita que los usuarios ejecuten la herramienta con valores no válidos.
Ha probado los parámetros, pero la herramienta todavía no está lista para ejecutarse, ya que no se ha agregado el código.
Editar el código de ejecución
El código de extensión de una herramienta de secuencias de comando Python es el código Python que se ejecuta cuando un usuario hace clic en Ejecutar en el panel Geoprocesamiento. Utilizará la secuencia de comandos independiente que revisó anteriormente, pero tendrá que realizar algunos cambios en ella para que la secuencia de comandos pueda recibir los parámetros introducidos por un usuario en el panel de herramientas.
- Haga clic con el botón derecho en la herramienta Recortar y comprimir y elija Propiedades.
- Haga clic en la pestaña Ejecución.

La pestaña muestra la plantilla de código Python para una herramienta de secuencia de comandos.

El código comienza con un marcador de posición de comentario de varias líneas para la documentación de la secuencia de comandos. En Python, tres comillas inician un comentario de varias líneas, y tres comillas lo terminan. Python no ejecuta el texto que se introduce dentro del comentario.
Después del comentario, la primera línea de código es import arcpy. La mayor parte de secuencias de comandos de la herramienta de geoprocesamiento utilizarán ArcPy, por lo que se incluye en la plantilla.
A continuación, se define una función denominada script_tool(). Una función se crea utilizando la palabra clave def seguida del nombre de la función y los argumentos de la misma. Cambiará el nombre de la función de plantilla para que coincida con su herramienta.
La función de plantilla especifica dos parámetros, pero su herramienta acepta más; esto también lo cambiará. El código de ejecución de la herramienta de secuencias de comandos irá dentro de esta función. Al final del bloque de plantilla de función hay una declaración return. Esto finaliza la función y devuelve los resultados.
La sección final del código comienza con if __name__ == '__main__':. Se trata de una declaración condicional y el bloque de código sangrado que sigue solo se ejecutará cuando la condición se evalúe como True. La variable __name__, con dos guiones bajos a cada lado, tiene el valor '__main__' para cualquier secuencia de comandos.
Cuando se ejecuta el código como una secuencia de comandos, que es el caso cuando se ejecuta una herramienta de secuencia de comandos, se ejecuta el bloque de código sangrado. En el caso de un módulo importado, sin embargo, la variable se establece con el nombre del módulo. En ese caso, el bloque de código sangrado no se ejecuta. Esta estructura de código permite distinguir entre ejecutar el código como una secuencia de comandos o importarlo a otra secuencia de comandos como módulo. Este escenario no se aplica en este caso. Para crear la herramienta de secuencias de comandos, basta con saber que el bloque de código sangrado se ejecuta cuando se ejecuta la herramienta de secuencias de comandos. El bloque de código recibe parámetros mediante la función ArcPy GetParameterAsText() y luego se invoca la función ScriptTool() en los parámetros.
La plantilla utiliza dos parámetros denominados param0 y param1. Se trata de marcadores de posición temporales; tendrá que editar los parámetros para que coincidan con su secuencia de comandos.
Nota:
En los próximos pasos, empezará a modificar el código de ejecución. Es importante saber dónde se almacena el código. De forma predeterminada, el código Python está integrado. Esto significa que forma parte del archivo de caja de herramientas .atbx y que no se almacena por separado. Sin embargo, puede exportar el código a un archivo .py para facilitar la edición y, posteriormente, integrar el código. Practicará este flujo de trabajo a medida que realice cambios incrementales en el código.
A continuación, modificará el nombre de la función script_tool() por algo más significativo. Para empezar, editará el código integrado directamente en la ventana de propiedades de la herramienta.
- En la pestaña Ejecución, en el cuadro de código, edite la línea def script_tool(param0, param1): para que sea def ClipZip(param0, param1):
La línea debe tener el aspecto de la imagen siguiente:

Al modificar el código en la ventana de propiedades de la herramienta, las líneas de código que se han modificado muestran un marcador amarillo delante.
- En el cuadro de código, edite la línea script_tool(param0, param1) para que sea ClipZip(param0, param1)

Ha actualizado el nombre de la función en los dos lugares en los que aparece en la plantilla de la herramienta de secuencias de comandos. Si bien editar el código de esta manera es muy práctico, el cuadro de código ofrece una funcionalidad limitada en comparación con un editor de Python típico. A continuación, verá dos métodos para editar el código de ejecución en un editor de Python.
- En la pestaña Ejecución, haga clic en Aceptar.

Los cambios en el código integrado se guardan automáticamente y los marcadores amarillos desaparecerán cuando cierre la ventana de propiedades de la herramienta.
- Haga clic con el botón derecho en la herramienta Recortar y comprimir y elija Propiedades.
- En la parte inferior del cuadro de código, haga clic en el botón Abrir en Editor de secuencias de comandos.

Se abre un archivo de secuencias de comandos temporal en el editor Python predeterminado. A menos que haya configurado otro editor, la secuencia de comandos se abre en IDLE.

Las modificaciones realizadas en el cuadro de secuencia de comandos se incluyen en la secuencia de comandos.
Nota:
Puede configurar el editor Python desde la pestaña Proyecto. Haga clic en la pestaña Proyecto, haga clic en Opciones y, por último, haga clic en Geoprocesamiento en el panel de la izquierda. La opción Editor de secuencias de comandos está en blanco de forma predeterminada, lo que indica que se utiliza IDLE. Puede cambiar a su editor preferido especificando la ruta. Para este tutorial, IDLE será suficiente.
La ruta será similar a: C:\Users\UserName\AppData\Local\Temp\1\ArcGISProTemp19512\
El nombre de archivo consta de las letras tmp seguidas por un código alfanumérico y la extensión de archivo .py. Al realizar cambios en el código y guardar el archivo .py, estos cambios se agregan al bloque de código de ejecución integrado. Practicará este flujo de trabajo.
- En IDLE, agregue una nueva línea de código debajo de import arcpy y agregue el código siguiente:
import os import zipfile
Estos dos módulos se utilizan en la secuencia de comandos independiente original. Puedes copiar y pegar desde la secuencia de comandos o escribir el código.
- Haga clic en Archivo y elija Guardar.

- Cierre IDLE.
El código agregado en IDLE se encuentra ahora en el cuadro de código.

Guardar la secuencia de comandos en un archivo independiente
El código con el que ha trabajado hasta ahora se ha integrado en la caja de herramientas. También exportará el código a un archivo .py para utilizarlo en su editor de Python preferido.
- En la pestaña Ejecución, encima del cuadro de secuencia de comandos, haga clic en la flecha verde del botón Exportar secuencia de comandos a archivo.

- En la ventana Exportar secuencia de comandos, verifique que la ubicación es la carpeta PythonTool. En Nombre, escriba clip_zip_tool.py.

Precaución:
La secuencia de comandos original con la mayor parte del código que necesita para transferir y actualizar se denomina clip_zip.py. Asegúrese de utilizar un nombre diferente para no sobrescribir el archivo original.
- Haga clic en Guardar.
Tras haber exportado el código del cuadro de secuencia de comandos a un archivo de secuencia de comandos Python externo, el código ya no se almacena en la caja de herramientas. En la parte superior del cuadro se muestra la ruta del archivo de secuencia de comandos.

La ventaja de tener un archivo .py independiente es que ahora puede trabajar más fácilmente con el código en su editor preferido. Sin embargo, en el presente tutorial seguirá utilizando IDLE.
El código que aparece en la ventana de propiedades de la herramienta ya no es el código integrado, sino el código del archivo .py. Sin embargo, puede seguir editando el código directamente en la ventana de propiedades de la herramienta y el archivo .py se guardará automáticamente al cerrar la ventana de propiedades de la herramienta.
Para la mayor parte del resto de este tutorial, abrirá el archivo .py en IDLE en lugar de editarlo en la ventana de propiedades de la herramienta.
- En la parte inferior del cuadro de código, haga clic en el botón Abrir en Editor de secuencias de comandos.
El archivo .py se abre en IDLE.

El nombre y la ruta del archivo ya no son temporales.
Nota:
Es posible editar el archivo de secuencia de comandos .py en el cuadro de código de la pestaña Ejecución y en IDLE al mismo tiempo. Sin embargo, esta no es la mejor manera de hacerlo. Recibirá un mensaje de advertencia y tendrá que determinar qué cambios conservar. Para evitarlo, edite su secuencia de comandos solo en una aplicación a la vez.
Tras haber exportado el código a un archivo .py, cerrará esta ventana.
- En la ventana Propiedades, haga clic en Aceptar.

A continuación, cambiará el código para que coincida con los parámetros de la herramienta de secuencias de comandos.
- En IDLE, después de la línea if __name__ == "__main__":, reemplace las dos líneas de parámetros que empiezan por param0 y param1 por el código siguiente:
inputs = arcpy.GetParameter(0) clip_fc = arcpy.GetParameterAsText(1) gdb = arcpy.GetParameterAsText(2) out_zip = arcpy.GetParameterAsText(3)
El código actualizado debe tener el aspecto de la imagen siguiente:

Nota:
Es importante que la sangría de las nuevas líneas coincida con el nivel de sangría original de cuatro espacios.
Se establecen cuatro parámetros para la herramienta de secuencias de comandos. De esta forma, la secuencia de comandos Python recibirá los cuatro parámetros.
Para obtener los parámetros de la herramienta de secuencia de comandos, puede utilizar las funciones ArcPy GetParameter() y GetParameterAsText(). La interfaz de usuario de la herramienta pasa los parámetros a la secuencia de comandos como una tupla Python, un tipo de datos de secuencia que utiliza la indexación basada en cero. El primer parámetro tiene un índice cero, el segundo parámetro tiene un índice uno, y así sucesivamente. Estos valores de índice están referenciados por los números entre paréntesis al final de cada una de las nuevas líneas. Si el orden de estos números no coincide con el orden de los parámetros en la interfaz de usuario de la herramienta, la secuencia de comandos obtendrá valores de datos erróneos.
Nota:
A partir de ArcGIS Pro 3.2, también es posible hacer referencia a los parámetros por su nombre. Por ejemplo, en lugar de arcpy.GetParameter(0), puede utilizar arcpy.GetParameter("Input_feature_layers"). Esto permite introducir los parámetros en cualquier orden y no es necesario conocer el índice de cada parámetro.
El primer parámetro consiste en una lista Python que puede contener varios nombres de clases de entidades de entrada. La función GetParameter() conserva este formato, por lo que se utiliza esta función para el primer parámetro. Los demás parámetros se reciben como texto mediante GetParameterAsText().
Cada valor de parámetro se asigna a una variable. Las variables se pasarán a la función ClipZip. Los nombres de las variables se eligieron para que fueran coherentes con el código de la secuencia de comandos independiente existente.
- Edite la línea ClipZip(param0, param1) para reemplazar param0, param1 por las variables que contienen los valores de los parámetros:
ClipZip(inputs, clip_fc, gdb, out_zip)

Este cambio debe tener el aspecto de la imagen siguiente:

Esta línea llama a la función ClipZip() con esos parámetros.
- Elimine la línea arcpy.SetParameterAsText(2, "Result").

Esta herramienta de secuencias de comandos no utiliza esta línea de la plantilla. A continuación, actualizará la definición de la función ClipZip().
- Edite la línea def ClipZip(param0, param1): para reemplazar param0, param1 por las variables que contienen los valores de los parámetros:
def ClipZip(inputs, clip_fc, gdb, out_zip):

Este cambio debe tener el aspecto de la imagen siguiente:

Esto define la función ClipZip() que acepta los cuatro parámetros.
No es necesario que las variables de la definición de la función utilicen los mismos nombres que la pestaña Parámetros, siempre que el orden de las variables sea el mismo. Los nombres de las variables de la línea de definición de la función deben ser coherentes con las variables del bloque de código que define lo que hace la función (que aún no se ha agregado).
- En IDLE, haga clic en Archivo y elija Guardar.
Los cambios realizados en IDLE se guardan en el archivo de secuencias de comandos. La secuencia de comandos debe tener el aspecto de la imagen siguiente:

Copiar código de la secuencia de comandos original
A continuación, agregará código de la secuencia de comandos original al bloque de código. La secuencia de comandos original contiene el código que agregará al bloque de código de su herramienta de secuencias de comandos.
- En IDLE, haga clic en Archivo y elija Abrir.

- En la carpeta C:\Tutorials\PythonTool, haga clic en clip_zip.py. Haga clic en Abrir.

- En IDLE, en la secuencia de comandos clip_zip.py, haga clic al principio de la línea # Workspace and datasets y arrastre hasta el final de la secuencia de comandos para seleccionar todo código, con la excepción de las líneas import.

- Haga clic con el botón derecho en el código seleccionado y elija Copiar.

- En IDLE, cambie a la ventana clip_zip_tool.py.
- Seleccione el comentario """Script code goes below""".

- Haga clic con el botón derecho en el código seleccionado y elija Pegar.

El código se pega en el bloque de código de la función ClipZip.

Ha terminado con la secuencia de comandos original.
- Cierre la ventana de la secuencia de comandos clip_zip.py.
Todo el bloque de código que ha copiado en la secuencia de comandos clip_zip_tool.py necesita una sangría de cuatro espacios para formar parte de la función. Aunque es posible hacerlo manualmente, escribiendo cuatro espacios antes de cada línea, también puede seleccionar las líneas que desea sangrar y sangrarlas todas a la vez.
En este caso, es mejor hacerlo todo de una vez, porque los espacios en blanco sangrados son importantes en Python. Si accidentalmente agregara tres espacios, o cinco, a una línea, el código no se ejecutaría correctamente. Además, dado que el código tiene varias líneas e incluye secciones sangradas para bucles y condiciones, es probable que agregar la indentación manualmente genere errores.
- En la ventana clip_zip_tool.py, arrastre para seleccionar el código que ha pegado y que aún no tiene una sangría de cuatro espacios para que coincida con el contenido del bloque de código. Detenga la selección antes de la línea return.
La línea # Workspace and datasets puede o no tener sangría, dependiendo de si los espacios antes del comentario """Script code goes below""" se seleccionaron al pegar el código.

- Haga clic en Formato y elija Sangrar región.

Las líneas de código se sangrarán cuatro espacios más.

- Verifique que el bloque de código de función ClipZip, las líneas posteriores a la línea def ClipZip y hasta la línea return inclusive tienen una sangría de cuatro espacios (o más, para líneas en bucles o declaraciones condicionales).
- Haga clic en Archivo y elija Guardar.
Eliminar valores codificados
Varias de las líneas de la secuencia de comandos original establecen variables en rutas específicas, lo que se conoce como codificación rígida de rutas. Esto era necesario para que la secuencia de comandos pudiera localizar y procesar los datos. Sin embargo, en una herramienta de secuencias de comandos, el usuario de la herramienta especifica las entradas y salidas utilizando los controles de la interfaz de usuario de la herramienta. Ha configurado el script para que utilice arcpy.GetParameter y arcpy.GetParameterAsText para obtener esta información de la interfaz de usuario de la herramienta. A continuación, eliminará las líneas codificadas.
- Elimine cada una de las líneas que especifican una ruta codificada.
Son las líneas que empiezan por arcpy.env.workspace = , clip_fc = , gdb = y out_zip =

- Elimine la línea arcpy.env.overwriteOutput = True.
No hay necesidad de mantener esta línea porque la propiedad overwriteOutput se controla mediante ArcGIS Pro cuando el código se ejecuta como una herramienta de secuencia de comandos.
- Mantenga la línea de código que asigna valores a las variables gdb_path y new_gdb dividiendo el valor de la variable gdb.

- Verifique que la línea tiene una sangría de cuatro espacios, el mismo nivel que el comentario # Workspace and datasets.
Acaba de eliminar todas las líneas de código con valores codificados. La secuencia de comandos obtendrá los valores de los parámetros de la herramienta de secuencia de comandos.
- Guarde el script.
Cambiar las declaraciones print por mensajes
La secuencia de comandos original utilizaba declaraciones print para imprimir el estado en la ventana Shell IDLE. Esto solo funciona cuando la secuencia de comandos se ejecuta desde el editor de secuencias de comandos. Editará las declaraciones print para utilizar arcpy.AddMessage para enviar esta información a los mensajes de geoprocesamiento.
Hay tres declaraciones print. Cambiará dos de ellas y borrará la restante.
- Edite la línea print(f"Output geodatabase {gdb} created") para cambiar print por arcpy.AddMessage.
Ahora la línea debe leerse así:
arcpy.AddMessage(f"Output geodatabase {gdb} created")

La siguiente declaración print del código imprime la lista de clases de entidades de entrada. La lista de clases de entidad variables inputs se establece ahora mediante la herramienta de secuencias de comandos, por lo que la línea de ajuste de entradas mediante arcpy.ListFeatureClasses no es necesaria. Borrará esta declaración print y la línea que crea la lista.
- En la sección # Clip each input feature class, seleccione la línea inputs = arcpy.ListFeatureClasses() y la línea print(inputs). Elimine ambas líneas.

La sección debe tener el aspecto de la imagen siguiente:

A continuación, editará la tercera declaración print.
- Edite la línea print(f"Output feature class {new_fc} created") para cambiar print por arcpy.AddMessage.
Ahora la línea debe leerse así:
arcpy.AddMessage(f"Output feature class {new_fc} created")

- Haga clic en Archivo y elija Guardar.
La sección final del código que crea el archivo ZIP no requiere ningún cambio.
- Cierre IDLE.
Probar la herramienta de secuencias de comandos
La herramienta de secuencias de comandos ya está lista para ser probada.
- En ArcGIS Pro, en el panel Catálogo, expanda la geodatabase DC.gdb.

- Haga clic con el botón derecho en bike_routes y elija Agregar al mapa actual.
- Expanda la caja de herramientas Clip_and_ZIP.atbx y haga doble clic en la herramienta Recortar y comprimir.
Aparece la herramienta Recortar y comprimir.
- En el parámetro Capas de entidades de entrada, haga clic en el botón Agregar muchos.

- Seleccione bike_racks, bike_routes y bus_lines. Haga clic en Agregar.

- En el parámetro Polígonos de recorte, seleccione la capa neighborhood.
- En el parámetro Geodatabase de salida, escriba C:\Tutorials\PythonTool\Clip.gdb
- En el parámetro Archivo ZIP de salida, escriba C:\Tutorials\PythonTool\Clip.zip

- Haga clic en Ejecutar.
Se ejecuta la herramienta. Al terminar, la parte inferior de la herramienta muestra un mensaje verde que indica que ha finalizado.
- Haga clic en Ver detalles.

En la ventana Detalles, la sección Mensajes muestra los mensajes generados por la herramienta, con el código modificado de declaraciones print a arcpy.AddMessage.
- Cierre la ventana de Detalles.
- Haga clic en la pestaña Catálogo.
La geodatabase Clip.gdb se agregó a la carpeta del proyecto.

El archivo ZIP no aparece en el panel Catálogo; no obstante, puede utilizar File Explorer para verificar que ha sido creado.

Ha creado una herramienta de secuencias de comandos Python operativa. La herramienta dispone de parámetros de entrada y salida, así como de algunos filtros básicos para estos parámetros con el fin de evitar algunos problemas comunes. A continuación, agregará más código de validación a la herramienta de secuencias de comandos para que resulte más sólida.
Mejorar la herramienta con la validación
Las herramientas de secuencias de comandos están diseñadas para procesar datos introducidos por el usuario. La validación se utiliza para garantizar que las entradas del usuario tengan sentido y no den lugar a errores. El primer paso en la validación consiste en diseñar cuidadosamente los parámetros de la herramienta. Por ejemplo, el parámetro Polígonos de recorte tiene un filtro para garantizar que solo se seleccionan clases de entidad de polígono. A continuación, explorará otros métodos de validación.
Agregar una comprobación de clases de entidad vacías
Imaginemos un escenario en el que una de las clases de entidad de salida esté vacía. Esto ocurre cuando ninguna de las entidades de una clase de entidad de entrada se encuentra dentro de los límites del polígono de recorte. En este caso, sería conveniente proporcionar un mensaje que indique que la salida está vacía.
- En el panel Catálogo, haga clic con el botón derecho en la herramienta Recortar y comprimir y elija Propiedades.
- Haga clic en la pestaña Ejecución.
- En la sección # Clip each input feature class, seleccione la línea arcpy.AddMessage(f"Output feature class {new_fc} created").

- Sustituya la línea por el código siguiente:
count = int(arcpy.management.GetCount(new_fc)[0]) if count > 0: arcpy.AddMessage(f"Output feature class {new_fc} created") else: arcpy.AddWarning(f"Output feature class {new_fc} created but does not contain any features.") - Compruebe que la sangría de su código coincide con la imagen siguiente:

El nuevo código comienza con la línea count = int(arcpy.management.GetCount(new_fc)[0]) que obtiene el número de entidades de la clase de entidad de salida. Se debe aplicar a esta línea el mismo nivel de sangría que a la línea anterior, que empieza por arcpy.analysis.Clip.
La siguiente línea utiliza una declaración if condicional para determinar si la nueva clase de entidad contiene entidades. En caso afirmativo, el bloque condicional se ejecuta y agrega el mensaje original. De lo contrario, se ejecuta el bloque else y se utiliza arcpy.AddWarning para agregar un mensaje de advertencia en el que se indica que la clase de entidad se ha creado pero está vacía. Las dos líneas condicionales, después de if y de else, deben presentar una sangría de cuatro espacios, en relación con las líneas anteriores.
- Haga clic en Aceptar.
- Haga doble clic en la herramienta Recortar y comprimir.
- En Capas de entidades de entrada, haga clic en el botón Examinar.
- Navegue hasta la geodatabase DC.gdb. Haga clic en la clase de entidad points_outside y haga clic en Aceptar.

Esta clase de entidad contiene entidades de punto que se encuentran fuera del polígono del shapefile de las vecindades. La usará para probar la herramienta.
- Para el segundo cuadro Capas de entidades de entrada, elija la capa bike_routes.
- En Polígonos de recorte, seleccione la capa de entidades neighborhood.
- En Geodatabase de salida, introduzca esta ruta: C:\Tutorials\PythonTool\Clip_empty.gdb.
- En Archivo ZIP de salida, introduzca esta ruta: C:\Tutorials\PythonTool\Clip_empty.zip.
- Haga clic en Ejecutar.
Se ejecuta la herramienta. Al terminar, la parte inferior de la herramienta muestra un banner amarillo que indica que ha finalizado con advertencias.
- En el banner, haga clic en Ver detalles.

La sección Mensajes muestra los mensajes generados por el código actualizado. Un mensaje de advertencia indica que la clase de entidad points_outside se ha creado, pero no contiene ninguna entidad.

Los demás mensajes de la herramienta también están presentes, como era de esperar.
- Cierre los mensajes de Recortar y comprimir y cierre la herramienta Recortar y comprimir.
Este tipo de validación se produce después de que la herramienta se haya ejecutado y se hayan creado los resultados. Otra posibilidad es utilizar la validación antes de ejecutar la herramienta.
Utilizar la validación para comprobar si la entrada está vacía
Supongamos un escenario en el que los polígonos de recorte seleccionados por un usuario consisten en una clase de entidad vacía. Esto no causará ningún error, ya que las entradas son válidas. Sin embargo, los resultados no serán significativos, ya que todas las clases de entidad recién creadas estarán vacías. Si hay una forma de saber de antemano que los resultados no van a ser significativos, lo ideal es que la herramienta no se ejecute.
Modificará las propiedades de la herramienta de secuencia de comandos y agregará una comprobación de entrada vacía. Este tipo de validación no se agrega al archivo de secuencias de comandos, sino que utiliza un tipo de validación diferente.
- En el panel Catálogo, haga clic con el botón derecho en la herramienta Recortar y comprimir y elija Propiedades.
- Haga clic en la pestaña Validación.

La pestaña Validación muestra una casilla de código, pero no es un archivo de secuencia de comandos. El código aquí solo reside en las propiedades de la herramienta y no se almacena como un archivo .py independiente. La pestaña Validación contiene código de plantilla que puede utilizar como punto de partida.

El código de plantilla muestra una clase denominada ToolValidator. La clase incluye varios métodos que se utilizan para distintos tipos de validación. La mayor parte de esta validación se lleva a cabo antes de ejecutar la herramienta.
Puede modificar el código directamente en el cuadro de código o puede abrir el código como un archivo de secuencia de comandos temporal haciendo clic en Abrir en Editor de secuencias de comandos.
- Haga clic en Abrir en Editor de secuencias de comandos.

- Seleccione las tres líneas del bloque de código def updateMessages.

- Sustituya los comentarios y la declaración return copiando y pegando el siguiente código:
# When the clip polygon feature set, feature layer or # feature class does not contain any features, a warning # message appears in the tool dialog since this would result # in empty feature classes in the new geodatabase. if self.params[1].value: count = int(arcpy.management.GetCount(self.params[1].value)[0]) if count < 1: self.params[1].setWarningMessage("No clip features. This results in empty outputs.") returnEl código se pega en la definición del método. Sin embargo, hay un problema. La primera línea de comentarios está correctamente sangrada, pero las líneas siguientes deben sangrarse cuatro espacios más.

- Seleccione las líneas que deben sangrarse.

- Haga clic en Formato y elija Sangrar región.
La sangría ya es la correcta.

- Haga clic en Archivo y elija Guardar.
- Cierre IDLE.
En ArcGIS Pro, se muestra una advertencia que indica que se han realizado cambios.
- Haga clic en Sí.
- Haga clic en Aceptar para cerrar la ventana de propiedades de la herramienta.
- Haga doble clic en la herramienta Recortar y comprimir.
- En Capas de entidades de entrada, agregue las capas bike_racks y bike_routes.
- En Polígonos de recorte, haga clic en el botón Examinar. Busque la geodatabase DC.gdb, haga clic en la clase de entidad polygon_empty y luego en Aceptar.

La clase de entidad polygon_empty es una clase de entidad de polígono que no contiene ninguna entidad.
Aparece un icono junto a la casilla de entrada Polígonos de recorte.
- Apunte al icono de advertencia.

El código de validación de la herramienta que ha agregado detecta que la clase de entidad de polígono está vacía y genera un mensaje de advertencia.
Un mensaje de advertencia significa que el usuario puede seguir ejecutando la herramienta, pero sabe de antemano cuáles serán los resultados. Por el contrario, si utiliza setErrorMessage en lugar de setWarningMessage, aparece un mensaje de error. Este error evitará la ejecución de la herramienta. Al diseñar la herramienta, es necesario analizar detenidamente qué tipo de mensaje es el más significativo.
Nota:
El código de validación utilizado aquí incluye la herramienta Obtener recuento. Esta herramienta se ejecuta cuando se ha seleccionado un valor para el parámetro. Por lo general, no conviene utilizar herramientas de geoprocesamiento en el código de validación, ya que puede llevar mucho tiempo y dar lugar a problemas imprevistos. La herramienta Obtener recuento es una excepción, porque es una herramienta muy sencilla que se ejecuta rápidamente, incluso para datasets muy grandes.
Agregar valores predeterminados
Otro tipo de validación de herramientas consiste en rellenar los parámetros de las herramientas con valores predeterminados. Esta técnica se utiliza en muchas herramientas de geoprocesamiento. Por ejemplo, cuando se ejecuta la herramienta Recortar, el nombre de la clase de la clase de entidad de salida es, de forma predeterminada, el nombre de la clase de entidad de entrada seguido de _Recortar. En el caso de la herramienta Recortar y comprimir, no existen valores predeterminados para los parámetros Geodatabase de salida y Archivo ZIP de salida. Agregará estos valores predeterminados al código de validación.
- Cierre la herramienta Recortar y comprimir.
- Abra la ventana Propiedades de la herramienta y haga clic en la pestaña Validación.
- Haga clic en Abrir en Editor de secuencias de comandos.
- En IDLE, seleccione las tres líneas del bloque de código def updateParameters.

- Reemplace las líneas por el siguiente código:
# The output geodatabase and ZIP archive are given default # names of Clip.gdb and Clip.zip, respectively, inside the # workspace of the project. Users can specify a different # file name and folder. if self.params[0].value and self.params[1].value: folder = os.path.split(arcpy.env.workspace)[0] self.params[2].value = os.path.join(folder, "Clip.gdb") self.params[3].value = os.path.join(folder, "Clip.zip") returnLa primera línea está correctamente sangrada, pero las demás deben sangrarse cuatro espacios más.

- Seleccione las líneas que deben sangrarse. Haga clic en Formato y elija Sangrar región.
Se ha solucionado el problema de sangría.

- Haga clic en Archivo y elija Guardar.
- Cierre IDLE.
- En ArcGIS Pro, para el mensaje de advertencia, haga clic en Sí.
- Haga clic en Aceptar para cerrar la ventana de propiedades de la herramienta.
- Haga doble clic en la herramienta Recortar y comprimir.
- En Capas de entidades de entrada, agregue las capas bike_racks y bike_routes.
- En Polígonos de recorte, seleccione la capa neighborhood.
En cuanto se ha especificado un valor para los dos primeros parámetros, el tercero y el cuarto se rellenan con los valores predeterminados correspondientes. Aparece un mensaje de advertencia, porque los archivos Clip.gdb y Clip.zip ya existen.

Puede ejecutar la herramienta con estas advertencias, o bien cambiar los nombres de salida y ejecutar la herramienta.
En este tutorial, ha aprendido a crear una herramienta de secuencia de comandos que proporciona una interfaz fácil de usar para el código Python. Ha aprendido a configurar parámetros para la herramienta de secuencia de comandos y cómo editar el código para que acepte parámetros de la herramienta de secuencia de comandos. También ha aprendido a eliminar rutas codificadas y a agregar mensajes de retorno de código. Por último, ha aprendido a agregar validación al código para que sea más sólido.
Encontrará más tutoriales en la galería de tutoriales.
