メッセージのタイプおよび重要度の概要

ツールの実行中に書き込まれたメッセージは、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

サーバー上のジョブのステータスを返します。

  • 0: 新規
  • 1: 送信済み
  • 2: 待ち状態
  • 3: 実行中
  • 4: 完了
  • 5: 失敗
  • 6: タイムアウト
  • 7: キャンセル中
  • 8: キャンセル済み
  • 9: 削除中
  • 10: 削除済み

cancel()

サーバー上のジョブをキャンセルします。

getInput(index)

指定された入力を返します。レコード セットまたはラスター データ オブジェクトの場合は、RecordSet または RasterData オブジェクトが返されます。

getMapImageURL(ParameterList, Height, Width, Resolution)

指定された出力に対するマップ サービス イメージを取得します。

getMessage(index)

特定のメッセージを返します。

getMessages(severity)

返されるメッセージのタイプ。0 はメッセージ、1 は警告、2 はエラーです。値を指定しない場合は、すべてのメッセージ タイプが返されます。

getOutput(index)

指定された出力を返します。レコード セットまたはラスター データ オブジェクトの場合は、RecordSet または RasterData オブジェクトが返されます。

getSeverity(index)

特定のメッセージの重要度を返します。

Result のプロパティとメソッド

次のサンプルでは、ジオプロセシング ツールを 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())