ツールの実行中に書き込まれたメッセージは、GetMessages などのジオプロセシング関数を使用して取得できます。これらのメッセージには、次のような情報が含まれています。
- 操作の開始時刻と終了時刻
- 使用されたパラメーター値
- 操作の進行状況に関する一般情報 (情報メッセージ)
- 潜在的な問題に関する警告 (警告メッセージ)
- ツールの実行を停止させるエラー (エラー メッセージ)
ツールとユーザーの間でのやり取りは、すべてメッセージによって行われます。ツールを実行している環境に応じて、メッセージは [結果] ウィンドウ、[Python] ウィンドウ、および進行状況ダイアログ ボックスに表示されます。Python では、これらのメッセージをスクリプトに取り込んだり、照会を行ったり、出力したり、ファイルに書き込んだりすることができます。すべてのメッセージに重要度のプロパティがあり、これは情報、警告、またはエラーのいずれかです。重要度は整数であり、0 = 情報、1 = 警告、2 = エラーです。
重要度 | 説明 |
---|---|
情報メッセージ (重要度 = 0) | 情報メッセージは、ツールの実行に関する情報です。問題を示すために使用されることはありません。ツールの進行状況、ツールが開始または完了した時刻、出力データの特性、ツールの結果など、一般的な情報のみが情報メッセージには示されます。 |
警告メッセージ (重要度 = 1) | 警告メッセージは、ツールの実行中に問題につながりかねない状況が発生した場合、または結果がユーザーの期待するものとは異なる可能性がある場合に生成されます。たとえば、警告が生成されるのは、すでに座標系が定義されているデータセットで座標系を定義しようとした場合です。警告が返された場合、ツールの実行をキャンセルする、別のパラメーターを指定するといったアクションを選択することができます。 |
エラー メッセージ (重要度 = 2) | エラー メッセージは、ツールの実行を妨げた重大なイベントを示します。1 つ以上のパラメーターの値が無効であったり、重要な実行プロセスまたはルーチンが失敗した場合にエラーが発生します。 |
警告メッセージとエラー メッセージの両方に、6 桁の ID コードが付いています。これらの ID コードは文書化されており、その原因と対処法についての追加情報が提供されます。エラーまたは警告のコードがツールのダイアログ ボックス、進行状況のダイアログ ボックス、[Python] ウィンドウ、[結果] ウィンドウに表示されている場合に、これらのコードのリンクをクリックすると、そのメッセージの詳細なヘルプに直接移動することができます。
メッセージの取得
最後に実行されたツールからのメッセージは ArcPy によって保持されており、GetMessages 関数を使用して取得できます。この関数は、最後に実行されたツールからのメッセージをすべて含む単一の文字列を返します。重要度オプションを使用して、返されたメッセージをフィルターに掛けることにより、指定した重要度のメッセージだけを取得することができます。ArcPy の使用時には、最初のメッセージは実行されたツールを示し、最後のメッセージはツールの実行の終了時刻と経過時間を示します。ツールの 2 番目のメッセージと最後のメッセージは常に、ツールの実行の開始時刻と終了時刻をそれぞれ示します。
ジオプロセシング メッセージの取得
import arcpy
# Execute the GetCount tool
arcpy.GetCount_management("c:/base/data.gdb/roads")
# Get the resulting messages and print them
print(arcpy.GetMessages())
個々のメッセージは、GetMessage 関数を使用して取得できます。この関数のパラメーターは 1 つで、メッセージのインデックス位置を指定します。GetMessageCount 関数は、最後に実行したツールから生成されたメッセージの数を返します。次の例では、実行されたツールに関する情報と、ツールの終了時刻および経過時間を出力する方法を示します。
import arcpy
arcpy.env.workspace = "D:/base/data.gdb"
arcpy.Clip_analysis("roads", "urban_area", "urban_roads")
# Print the first message
print(arcpy.GetMessage(0))
# Print the last message - ending and elapsed times for tool
print(arcpy.GetMessage(arcpy.GetMessageCount - 1))
Result オブジェクトからのメッセージの取得
Result オブジェクトを使用して、ツールからメッセージにアクセスすることもできます。ArcPy からメッセージを取得する場合とは異なり、Result オブジェクトに格納されたメッセージは複数のツールを実行した後でも維持できます。Result オブジェクトは、ジオプロセシング ツールのメッセージの取得と解釈に使用されるものと同じ関数をいくつかサポートします。
Result のプロパティとメソッド
プロパティとメソッド | 説明 |
---|---|
inputCount | 入力の数を返します。 |
outputCount | 出力数を返します。 |
messageCount | メッセージ数を返します。 |
maxSeverity | 最大の重要度を返します。返される重要度は、0 (エラー/警告なし)、1 (警告が発生)、または 2 (エラーが発生) です。 |
resultID | 一意の結果 ID を返します。ツールがジオプロセシング サービスでない場合、resultID は "" になります。 |
status | サーバー上のジョブのステータスを返します。
|
cancel() | サーバー上のジョブをキャンセルします。 |
getInput(index) | 指定された入力を返します。レコード セットまたはラスター データ オブジェクトの場合は、RecordSet または RasterData オブジェクトが返されます。 |
getMapImageURL(ParameterList, Height, Width, Resolution) | 指定された出力に対するマップ サービス イメージを取得します。 |
getMessage(index) | 特定のメッセージを返します。 |
getMessages(severity) | 返されるメッセージのタイプ。0 はメッセージ、1 は警告、2 はエラーです。値を指定しない場合は、すべてのメッセージ タイプが返されます。 |
getOutput(index) | 指定された出力を返します。レコード セットまたはラスター データ オブジェクトの場合は、RecordSet または RasterData オブジェクトが返されます。 |
getSeverity(index) | 特定のメッセージの重要度を返します。 |
次のサンプルでは、ジオプロセシング ツールを 2 つ実行しますが、メッセージを評価する前にツールが実行されるまで待ちます。
import arcpy
arcpy.env.workspace = "D:/base/data.gdb"
# Execute the Clip and GetCount tools
clipResult = arcpy.Clip_analysis("roads", "urban_area", "urban_roads")
countResult = arcpy.GetCount_management("urban_roads")
# Get the resulting messages and print them
print(clipResult.getMessages())
print(countResult.getMessages())
ジオプロセシング ツールの場合と同様に、サーバー ツール メッセージは情報、警告、またはエラーに分類されます。メッセージの種類は、数値で表される重要度プロパティによって示されます。次のサンプルでは、サーバー ツールの完了後にそのツールからのメッセージを取得する方法を示します。
import arcpy
import time
# Add the server toolbox
arcpy.ImportToolbox("http://lab13/arcgis/services;BufferByVal", "mytools")
featset = arcpy.FeatureSet()
featset.load("//flames/gpqa/coredata/global/redlands/control.shp")
# Run a server tool named BufferPoints
result = arcpy.BufferPoints_mytools(featset, "1000 feet")
# Wait until the tool completes
while result.status < 4:
time.sleep(0.2)
# Print all messages from the result object
print(result.getMessages())