Bagaimana cara mengakses id pekerjaan saat ini dari skrip geoproses yang berjalan di server esri?

8

Saya ingin secara program mengakses id pekerjaan saat ini dari skrip geoproses yang berjalan pada ESRI 10.2. Script adalah apa yang perlu diketahui id pekerjaan, bukan penelepon script.

Saat mencari, saya telah melihat banyak contoh bagaimana mengirimkan permintaan pekerjaan kembali dengan id pekerjaan. Ini bukan yang saya inginkan.

Dalam skrip saya yang berjalan di server, saya ingin memasukkan id pekerjaan dalam log, namun saya belum menemukan cara mendapatkan pekerjaan di dalam skrip. Saya awalnya memeriksa arcpy.env, tetapi saya tidak melihat apa pun. Di mana lagi saya harus mencari?

pgreen2
sumber
2
Anda ingin layanan yang berjalan untuk melaporkan jobId? Tidak ada yang terkena untuk melakukan ini. Anda bisa menggunakan modul 'os' untuk mem-parsing path dan mendapatkannya dari sana.
KHibma
1
Itu mengecewakan. Saya sedang memikirkan hal yang sama seperti yang Anda sarankan; terima kasih telah mengkonfirmasi kecurigaan saya.
pgreen2
@ Khibma, adakah cara sederhana untuk menentukan apakah skrip berjalan pada server vs melalui arcmap?
pgreen2
1
Seperti yang disarankan Kevin, saya akan menyarankan untuk mencoba mendapatkan id pekerjaan dengan melihat melalui folder yang dibuat di dalam folder arcgisserver / arcgisjobs. Anda mungkin ingin melihat folder apa yang terakhir dibuat dan mendapatkan namanya.
Alex Tereshenkov
@ pgreen2 lihat utas ini: gis.stackexchange.com/questions/64937/…
KHibma

Jawaban:

6

Saya ingat naskah lama yang saya gunakan dalam pengujian, jadi saya pikir saya akan membagikannya. Mungkin itu akan membantu Anda atau orang lain. Saya menambahkan logika untuk mendapatkan GUID. Mungkin ada cara yang lebih baik untuk melakukannya, tetapi berhasil.

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

Anda juga dapat menggunakan arcpy.env.scratchWorkspace saat mengembalikan:

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

Untuk mengisolasi id pekerjaan dari string:

job_id = arcpy.env.scratchWorkspace.rsplit("\\", 2)[1]
>>>"j83b20a86cc2d471cb684b4ce0aa9b81b"
Tristan Maju
sumber
Itu hebat!
Alex Tereshenkov