Estoy desarrollando un código que quiero ejecutar tanto como un servicio web de ArcGIS Server como un script independiente. Quiero poder modificar ligeramente la ejecución dependiendo de si se está ejecutando como un servicio web AGS o como un python / dentro de Desktop.
¿Hay alguna forma de detectar esto?
He hecho algunas búsquedas pero no he encontrado nada muy satisfactorio. He visto arcpy.mapping.CreateGISServerConnectionFile, pero esto establece conexiones a un servidor en lugar de verificar el entorno actual. También busqué información sobre cómo se ejecutan los servicios con AGS (por ejemplo, esto ), pero realmente no veo nada similar a un tipo de función arcpy.isWebService (). ¿Solo necesito verificar el entorno (para ver si se ha configurado "% scratchFolder% o examinar algo relacionado con sys.argv)? Parece una solución inestable.
@KHibma y otros me hicieron preguntarme si podría obtener la información usando arcpy para verificar la versión. Cavé un poco a ciegas y creo que tengo algo, incluso si no es lo que esperaba. No he comprobado bajo AGS todavía.
Produce un buen dict:
Entonces puedo decir:
¡Gracias por patear eso!
fuente
Para que pueda verificar qué está instalado. Sin embargo, esto no lo llevará muy lejos si DT y Server están instalados en la misma máquina. En cuanto a una función que te dice en qué te estás ejecutando, no, no existe.
Pensando en voz alta: DT es de 32 bits, el servidor es de 64 bits. Puede hacer un sys.path e inspeccionar qué versión de Python se está utilizando.
o
Si sabe que se está ejecutando como un servicio GP (no solo usando el python del servidor) frente a DT, puede inspeccionar la ruta de arcpy.env.scratchFolder. En una instalación típica, siempre se verá como C: \ arcgisserver \ directorios \ arcgisjobs \ [service] _gpserver \ [guid] \ ....
fuente
RuntimeManager
es .NET, no un objeto COM.C:\Program Files (x86)\Common Files\ArcGIS\bin\ArcGISVersion.dll
es una biblioteca de tipo cargable que tiene muchos de los mismos objetos, podría usarla desde los tipos.