Wie kann ich über ein auf dem esri-Server ausgeführtes Geoverarbeitungsskript auf die aktuelle Job-ID zugreifen?

8

Ich möchte programmgesteuert auf die aktuelle Job-ID eines Geoverarbeitungsskripts zugreifen, das unter ESRI 10.2 ausgeführt wird. Das Skript muss die Job-ID kennen, nicht der Aufrufer des Skripts.

Während der Suche habe ich viele Beispiele dafür gesehen, wie die Anforderung zum Senden von Jobs mit der Job-ID zurückgegeben wird. Das will ich nicht.

In meinem Skript, das auf dem Server ausgeführt wird, möchte ich die Job-ID in die Protokolle aufnehmen. Ich habe jedoch nicht gefunden, wie der Job im Skript abgerufen werden kann. Ich habe anfangs nachgesehen arcpy.env, aber nichts gesehen. Wo soll ich sonst noch suchen?

pgreen2
quelle
2
Sie möchten, dass der ausgeführte Dienst die Job-ID meldet? Dafür ist nichts ausgesetzt. Sie können das 'os'-Modul verwenden, um Pfade zu analysieren und von dort abzurufen.
KHibma
1
Das ist enttäuschend. Ich habe in die gleiche Richtung gedacht, wie Sie vorgeschlagen haben. Vielen Dank für die Bestätigung meines Verdachts.
pgreen2
@KHibma, gibt es eine einfache Möglichkeit, um festzustellen, ob das Skript auf dem Server ausgeführt wird, oder über arcmap?
pgreen2
1
Wie Kevin vorgeschlagen hat, würde ich empfehlen, die Job-ID zu ermitteln, indem Sie die Ordner durchsuchen, die im arcgisserver-Ordner / arcgisjobs erstellt wurden. Vielleicht möchten Sie sehen, welcher Ordner zuletzt erstellt wurde, und seinen Namen erhalten.
Alex Tereshenkov
@ pgreen2 überprüfen Sie diesen Thread: gis.stackexchange.com/questions/64937/…
KHibma

Antworten:

6

Ich erinnerte mich an ein altes Skript, das ich beim Testen verwendete, und dachte, ich würde es teilen. Vielleicht hilft es dir oder jemand anderem. Ich habe die Logik hinzugefügt, um die GUID zu erhalten. Es gibt wahrscheinlich einen besseren Weg, aber es funktioniert.

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
quelle
3

Sie können auch arcpy.env.scratchWorkspace verwenden, wenn es Folgendes zurückgibt:

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

So isolieren Sie die Job-ID von der Zeichenfolge:

job_id = arcpy.env.scratchWorkspace.rsplit("\\", 2)[1]
>>>"j83b20a86cc2d471cb684b4ce0aa9b81b"
Tristan vorwärts
quelle
Das ist großartig!
Alex Tereshenkov