メッセージのタイプおよび重要度の概要
ツールの実行中にはメッセージが書き込まれ、これらのメッセージは 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()
# The returned messages would look similar to the following:
# Executing: GetCount c:/base/data.gdb/roads
# Start Time: Wed Apr 07 11:28:21 2010
# Row Count = 373
# Succeeded at Wed April 07 11:28:21 2010 (Elapsed Time: 0.00 seconds)
個々のメッセージは、GetMessage 関数を使用して取得できます。この関数のパラメータは 1 つで、メッセージのインデックス位置を指定します。GetMessageCount 関数は、最後に実行されたツールからのメッセージの数を返します。次の例では、実行されたツールに関する情報と、ツールの終了時刻および経過時間を出力する方法を示します。
import arcpy
arcpy.env.workspace = "D:/base/data.gdb"
arcpy.Clip_analysis("roads", "urban_area", "urban_roads")
# Print the first message - tool executed
#
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 オブジェクトは、ジオプロセシング ツールのメッセージの取得と解釈に使用されるものと同じ関数をいくつかサポートします。
プロパティとメソッド |
説明 |
---|---|
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()