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?

pgreen2
fonte
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())
KHibma
fonte
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"
Tristan Avançado
fonte
Essa é ótima!
Alex Tereshenkov