了解消息类型和严重性

在工具执行期间,系统会写入可通过地理处理函数(如 GetMessages())进行检索的消息。这些消息包含如下信息:

工具和用户之间的所有沟通均通过消息来实现。根据运行工具的位置,消息可以出现在结果窗口、Python 窗口和进度对话框中。通过 Python,您可以从脚本中提取这些消息、对其进行询问、打印或将其写入文件。所有消息都具有严重性属性,即信息性、警告或错误。严重性用一个整数表示,其中 0 = 信息性,1 = 警告,2 = 错误。

严重性

信息性消息(严重性 = 0)

信息性消息只是有关执行的信息。从不用来指明问题。信息性消息中只包含诸如工具进度、工具开始或结束运行的时间、输出数据特征或工具结果等常规信息。

警告消息(严重性 = 1)

警告消息可在以下情况下产生:工具所遇到的情况会在工具执行期间产生问题,或者结果可能不是预期结果。例如,当为已经定义了坐标系的数据集定义坐标系时就会生成警告。在返回警告时,您可以采取必要的操作,例如,取消工具的执行或选择其他参数。

错误消息(严重性 = 2)

错误消息表示有重要事件已阻止工具运行。当一个或多个参数的值无效;或某个关键的执行进程或例程失败时会产生错误。

警告消息和错误消息均带有 6 位 ID 代码。这些 ID 代码已记录在案,可提供有关这些消息产生原因及处理方式的附加信息。当错误或警告代码在工具或进度对话框、Python 窗口或结果窗口中显示时,它们都具有一个链接,通过该链接可以直接转到相应消息的附加帮助。

获取消息

执行上一个工具时所生成的消息由 ArcPy 进行保存,并且可使用 GetMessages 函数进行检索。此函数会返回一个包含上次执行工具时所生成的全部消息的字符串。可以使用严重性选项对返回的消息进行过滤,以便只包含具有某种严重性的消息。使用 ArcPy 时,第一条消息提供所执行的工具,最后一条消息提供工具的持续执行时间和结束执行时间。工具的第二条和最后一条消息总是分别提供工具的开始执行时间和结束执行时间。

获取地理处理消息

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 函数检索单独的消息。此函数具有一个参数,即消息的索引位置。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)

从结果对象获取消息

也可以通过某个使用结果对象的工具来访问消息。与从 ArcPy 中获取消息不同,即使在运行多个工具之后,仍可保留“结果”对象上的消息。“结果”对象支持多个用于获取和解释地理处理工具消息的相同函数。

Result properties and methods

Properties and methods

Explanation

inputCount

Returns the number of inputs.

outputCount

Returns the number of outputs.

messageCount

Returns the number of messages.

maxSeverity

Returns the maximum severity. The returned severity can be 0 (no errors/warnings raised), 1 (warnings raised), or 2 (errors raised).

resultID

Returns the unique result ID. If the tool is not a geoprocessing service, the resultID will be "".

status

Returns the status of the job on the server.

  • 0—New
  • 1—Submitted
  • 2—Waiting
  • 3—Executing
  • 4—Succeeded
  • 5—Failed
  • 6—Timed Out
  • 7—Canceling
  • 8—Canceled
  • 9—Deleting
  • 10—Deleted

cancel()

Cancels the job on the server.

getInput(index)

Returns a given input. If a record set or raster data object, a RecordSet or RasterData object is returned.

getMapImageURL(ParameterList, Height, Width, Resolution)

Get map service image for a given output.

getMessage(index)

Returns a specific message.

getMessages(severity)

The type of messages to be returned: 0=message, 1=warning, 2=error. Not specifying a value returns all message types.

getOutput(index)

Returns a given output. If a record set or raster data object, a RecordSet or RasterData object is returned.

getSeverity(index)

Returns the severity of a specific message.

Result properties and methods

以下示例将运行两个地理处理工具,但要一直等到工具执行后才能查看消息。

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()

相关主题

5/10/2014