8 votos

La comprobación de si la secuencia de comandos de python que se ejecuta desde ArcGIS (arcmap o en el servidor) o una secuencia de comandos de python independiente

Para propósitos de depuración he creado un duro condicional que comprueba que la secuencia de comandos se ejecuta como independiente o como una herramienta ArcGIS. Existe de todos modos para fugure esta en tiempo de ejecución? por ejemplo, algunas variables de entorno, variables globales, etc.

por ejemplo,

dryRun= 1
if dryRun:
    par= 'Hello'
else:
    par= arcpy.GetParameterAsText(0)
# Do something

19voto

Paul Puntos 555

Compruebe sys.executable.

En la ventana de Python:

>>> import sys
>>> sys.executable
'C:\\Program Files (x86)\\ArcGIS\\Desktop10.2\\bin\\ArcMap.exe'

y, a continuación, en Python.exe:

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.executable
'C:\\Python27\\ArcGIS10.2\\python.exe'

Así, un simple if os.path.basename(sys.executable).lower() == 'python.exe' debe hacerlo.

1voto

Prachur Puntos 111

Si entiendo tu pregunta correctamente, desea comprobar para ver si usted está ejecutando un script como una herramienta de secuencia de comandos o no. Si se está ejecutando como una herramienta de secuencia de comandos, usted desea establecer algunas variables mediante GetParameterAsText, y si se está ejecutando como independiente, que desee utilizar algunos codificados de las variables, es esto correcto? Si es así, usted puede hacer lo siguiente:

if len(sys.argv) > 1:
    #Assign input and output parameters for script tool
    par = arcpy.GetParameterAsText(0)
else:
    # Hard coded parameters for testing
    par = 'Hello'

Por la comprobación de la longitud de sys.argv determinar cuántos parámetros se pasan a la secuencia de comandos. Siempre hay al menos un parámetro (la ubicación de la secuencia de comandos en sí), así que si hay más de uno que se pasa, se puede asumir que ArcGIS es el envío de ellos (a menos que usted sea pasar argumentos de algún otro lugar).

0voto

Örjan Jämte Puntos 3127

Una manera simple de hacerlo sería como este:

import arcpy
par = arcpy.GetParameterAsText(0)
if not par: #If no parameter has been passed, an empty string is returned
  par = 'Hello'

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