メッセージのタイプおよび重要度の概要
ツールの実行中にはメッセージが書き込まれ、これらのメッセージは 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 は "" になります。 |
状態 |
サーバ上のジョブのステータスを返します。
|
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()