Como acessar a identificação de trabalho atual do script de geoprocessamento em execução no servidor esri?


8

Desejo acessar programaticamente o ID da tarefa atual de um script de geoprocessamento em execução no ESRI 10.2. O script é o que precisa saber a identificação do trabalho, não o responsável pela chamada.

Durante a pesquisa, vi vários exemplos de como a solicitação de trabalho de envio retorna com o ID do trabalho. Não é isso que eu quero.

No meu script que está sendo executado no servidor, quero incluir a identificação do trabalho nos logs, mas não encontrei como obter o trabalho no script. Inicialmente arcpy.env, verifiquei , mas não vi nada. Onde mais devo procurar?


2
Você deseja que o serviço em execução relate o jobId? Não há nada exposto para fazer isso. Você pode usar o módulo 'os' para analisar caminhos e obtê-lo a partir daí.
KHibma

1
Isso é decepcionante. Eu estava pensando da mesma maneira que você sugeriu; obrigado por confirmar minhas suspeitas.
Pgreen2

@KHibma, existe uma maneira simples de determinar se o script está sendo executado no servidor vs através do arcmap?
Pgreen2

1
Como Kevin sugeriu, aconselho a tentar obter o ID do trabalho examinando as pastas criadas na pasta arcgisserver / arcgisjobs. Você pode querer ver qual pasta foi criada por último e obter seu nome.
Alex Tereshenkov 24/09

@ pgreen2 verifique este tópico: gis.stackexchange.com/questions/64937/…
#

Respostas:


6

Lembrei-me de um script antigo que uso nos testes, então pensei em compartilhar. Talvez ajude você ou outra pessoa. Eu adicionei a lógica para obter o GUID. Provavelmente existe uma maneira melhor de fazer isso, mas 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())

3

Você também pode usar arcpy.env.scratchWorkspace, pois ele retorna:

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

Para isolar o ID do trabalho da sequência:

job_id = arcpy.env.scratchWorkspace.rsplit("\\", 2)[1]
>>>"j83b20a86cc2d471cb684b4ce0aa9b81b"

Essa é ótima!
Alex Tereshenkov
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.