4 votos

ArcGIS Toolbox, parámetros para script python no como argumentos posicionales

Tengo una caja de herramientas ArcGIS con un montón de parámetros. Un script de python se utiliza para realizar algunas operaciones raster, basado en estos parámetros. Estoy usando Python argparse en la secuencia de comandos para obtener los parámetros. Hago esto porque el programa fue desarrollado originalmente como una herramienta de línea de comandos utilizando ArcPy. Con argparse puedo mostrar algún texto de ayuda útil y utilizar interruptores de línea de comandos donde la posición del argumento en la lista de argumentos no importa. Por supuesto argparse ofrece muchas más ventajas.

ArcGIS pasa los parámetros como argumentos posicionales. Así que no puedo usar parámetros como -k o --doSomeThing=100

Utilizando una casilla de verificación por ejemplo, que está marcada, esto pasará un "verdadero" a mi script, pero me gustaría tener un interruptor de línea de comandos "real" como "-k" o algo así. ¿Alguien sabe si esto es posible? ¿Quizás usando una herramienta de validación?

3voto

Lucas Puntos 128
  • Respuesta corta - No, ArcGIS siempre pasará los parámetros como argumentos posicionales.
  • Respuesta más larga - Más o menos, si utilizas una técnica un poco chapucera de aceptar ambos argumentos posicionales u opciones en tu script, utilizando el comando parse_known_args método.

Algo así como:

import argparse

def main(arg1,arg2,arg3):
    print arg1,arg2,arg3

parser = argparse.ArgumentParser(prog='MyCoolPythonTool')
parser.add_argument('-a', default='1')
parser.add_argument('-b', default='2')
parser.add_argument('-c', default='3')

# Fake some ArcGIS positional args
opts,args = parser.parse_known_args('4 5 6'.split())

if args: # ArcGIS has supplied the arguments in the correct order
    main(*args)
else: # args supplied on the command line
    main(opts.a, opts.b, opts.c)

# Fake some commandline options
opts,args = parser.parse_known_args('-a 9 -b 8 -c 7'.split())

if args: # ArcGIS has supplied the arguments in the correct order
    main(*args)
else: # args supplied on the command line
    main(opts.a, opts.b, opts.c)

1voto

ansur Puntos 150

Una caja de herramientas de ArcGIS le proporciona una interfaz de usuario en la que puede establecer parámetros como opcionales y manejarlos en consecuencia. Esto consigue lo mismo que los parámetros opcionales con argparse a los que se refiere. Si desea ejemplos / aclaración hágamelo saber y voy a ampliar sobre esto con ejemplos de código de argparse y ejemplos gráficos / código de la creación de un ArcToolbox.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X