Esriサーバーで実行されているジオプロセシングスクリプトから現在のジョブIDにアクセスする方法


8

ESRI 10.2で実行されているジオプロセシングスクリプトの現在のジョブIDにプログラムでアクセスしたい。スクリプトは、スクリプトの呼び出し元ではなく、ジョブIDを知る必要があるものです。

検索中に、ジョブIDを使用してジョブ送信要求がどのように返されるかを示す例をたくさん見ました。これは私が欲しいものではありません。

サーバーで実行されているスクリプトで、ジョブIDをログに含めたいのですが、スクリプトでジョブを取得する方法がわかりません。最初にチェックしましたがarcpy.env、何も表示されませんでした。他にどこを見ればいいですか?


2
実行中のサービスにjobIdを報告させますか?これを行うために公開されたものはありません。'os'モジュールを使用してパスを解析し、そこから取得できます。
KHibma 2013

1
それは残念です。私はあなたが提案したのと同じように考えていました。私の疑惑を確認してくれてありがとう。
pgreen2 2013

@KHibma、スクリプトがサーバーで実行されているのか、それともアークマップを介して実行されているのかを判別する簡単な方法はありますか?
pgreen2 2013

1
Kevinが提案したように、arcgisserverフォルダー/ arcgisjobs内に作成されたフォルダーを調べて、ジョブIDを取得することをお勧めします。最後に作成されたフォルダを確認して、その名前を取得することができます。
Alex Tereshenkov 2013

@ pgreen2このスレッドをチェックアウト:gis.stackexchange.com/questions/64937/...
KHibma

回答:


6

テストで使用した古いスクリプトを覚えていたので、共有したいと思いました。多分それはあなたや誰かを助けるでしょう。GUIDを取得するロジックを追加しました。おそらくもっと良い方法がありますが、うまくいきます。

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

次を返すため、arcpy.env.scratchWorkspaceを使用することもできます。

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

文字列からジョブIDを分離するには:

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

それは素晴らしいことです!
Alex Tereshenkov 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.