¿Cómo acceder a la identificación del trabajo actual desde el script de geoprocesamiento que se ejecuta en el servidor esri?

8

Quiero acceder mediante programación al identificador de trabajo actual de un script de geoprocesamiento que se ejecuta en ESRI 10.2. El script es lo que necesita saber la identificación del trabajo, no la persona que llama del script.

Durante la búsqueda, he visto muchos ejemplos de cómo la solicitud de envío de trabajos regresa con la identificación del trabajo. Esto no es lo que quiero.

En mi script que se ejecuta en el servidor, quiero incluir la identificación del trabajo en los registros, sin embargo, no he encontrado cómo obtener el trabajo en el script. Inicialmente lo comprobé arcpy.env, pero no vi nada. ¿Dónde más debería mirar?

pgreen2
fuente
2
¿Desea que el servicio en ejecución informe el JobId? No hay nada expuesto para hacer esto. Puede usar el módulo 'os' para analizar rutas y obtenerlo desde allí.
KHibma
1
Eso es decepcionante. Estaba pensando en la misma línea que usted sugirió; Gracias por confirmar mis sospechas.
pgreen2
@KHibma, ¿hay una manera simple de determinar si el script se ejecuta en el servidor en comparación con arcmap?
pgreen2
1
Como sugirió Kevin, aconsejaría que tratara de obtener la identificación del trabajo mirando las carpetas que se crean dentro de la carpeta / arcgisjobs de arcgisserver. Es posible que desee ver qué carpeta se creó por última vez y obtener su nombre.
Alex Tereshenkov
@ pgreen2 echa un vistazo a este hilo: gis.stackexchange.com/questions/64937/…
KHibma

Respuestas:

6

Recordé un script antiguo que uso en las pruebas, así que pensé en compartirlo. Tal vez te ayude a ti oa alguien más. Agregué la lógica para obtener el GUID. Probablemente haya una mejor manera de hacerlo, pero funciona.

import arcpy, sys, socket, os

theExe = sys.executable

arcpy.AddMessage("the executable    : " + theExe)
arcpy.AddMessage("where is arcpy    : " + str(arcpy.__file__))
arcpy.AddMessage("the install dir   : " + str(arcpy.GetInstallInfo()["InstallDir"]))
arcpy.AddMessage("the product is    : " + str(arcpy.GetInstallInfo()["ProductName"]))
arcpy.AddMessage("the py version is : " + str(sys.version))
arcpy.AddMessage("hostname          : " + str(socket.gethostname()))
arcpy.AddMessage("path              : " + str(sys.path[0]))
arcpy.AddMessage("path              : " + str(os.path.dirname(__file__)))
arcpy.AddMessage("working dir       : " + str(os.getcwd()))
scr = arcpy.env.scratchFolder
arcpy.AddMessage(scr)  
if "server" in theExe.lower():
    guid = os.path.split(os.path.split(scr)[0])[1] #split 'scratch' off, then split remainder and grab guid    
    arcpy.AddMessage(guid)

arcpy.AddMessage("--------------------------------")
arcpy.AddMessage(arcpy.ProductInfo())
arcpy.AddMessage(arcpy.GetInstallInfo())
KHibma
fuente
3

También puede usar arcpy.env.scratchWorkspace cuando regrese:

"e:\arcgisserver\directories\arcgisjobs\analysis\your_program\j83b20a86cc2d471cb684b4ce0aa9b81b\scratch"

Para aislar la identificación del trabajo de la cadena:

job_id = arcpy.env.scratchWorkspace.rsplit("\\", 2)[1]
>>>"j83b20a86cc2d471cb684b4ce0aa9b81b"
Tristán Delantero
fuente
¡Esa es genial!
Alex Tereshenkov