当工具运行时,系统将写入可通过地理处理函数(例如 GetMessages 和 GetAllMessages)进行检索的消息。 这些消息包含如下信息:
- 操作的开始及结束时间
- 所使用的参数值
- 有关操作进度的常规信息(信息性消息)
- 潜在问题的警告(警告消息)
- 导致工具停止运行的错误(错误消息)
工具和用户之间的所有沟通均通过消息来实现。 根据运行工具的位置,消息可以出现在结果窗口、Python 窗口和进度对话框中。 通过 Python,您可以从脚本中提取这些消息、对其进行询问、打印或将其写入文件。 所有消息都具有严重性属性,即信息性、警告或错误。 严重性用一个整数表示,其中 0 = 信息性,1 = 警告,2 = 错误。
严重性 | 描述 |
---|---|
信息性消息(严重性 = 0) | 信息性消息是有关工具运行的消息。 从不用来指明问题。 信息性消息中只包含诸如工具进度、工具开始或结束运行的时间、输出数据特征或工具结果等常规信息。 |
警告消息(严重性 = 1) | 警告消息可在以下情况下产生:工具所遇到的情况会在工具运行时产生问题,或者结果可能不是预期结果。 例如,当为已经定义了坐标系的数据集定义坐标系时就会生成警告。 在返回警告时,您可以采取必要的操作,例如,取消工具的运行或选择其他参数。 |
错误消息(严重性 = 2) | 错误消息表示有重要事件已阻止工具运行。 当一个或多个参数的值无效;或某个关键的进程或例程失败时会产生错误。 |
警告消息和错误消息均带有 6 位 ID 代码。 这些 ID 代码已记录在案,可提供有关这些消息产生原因及处理方式的附加信息。 当错误或警告代码在工具或进度对话框、Python 窗口或结果窗口中显示时,它们都具有一个链接,通过该链接可以直接转到相应消息的附加帮助。
访问消息
可以使用 GetMessages 或 GetAllMessages 函数检索来自上次工具运行的消息。
GetMessages 函数将返回一个字符串,其中包含来自之前已运行的工具的所有消息。 可以使用严重性选项对返回的消息进行过滤,以便只包含具有某种严重性的消息。 该工具的第一条和最后一条消息将始终分别提供工具运行的开始时间和结束时间。
import arcpy
# Run the GetCount tool
arcpy.management.GetCount("c:/base/data.gdb/roads")
# Get the resulting messages and print them
print(arcpy.GetMessages())
GetAllMessages 函数将返回一个列表列表,其中包含来自之前已运行的工具的所有消息的消息类型、返回代码和消息字符串。 该工具的第一条和最后一条消息将始终分别提供工具运行的开始时间和结束时间。
import arcpy
from pprint import pprint
# Run the GetCount tool
arcpy.management.GetCount("c:/base/data.gdb/roads")
# Get the resulting messages and print them
pprint(arcpy.GetAllMessages())
可使用 GetMessage 函数检索单独的消息。 此函数具有一个参数,即消息的索引位置。 GetMessageCount 函数将返回来自之前运行的工具的消息数量。 以下示例显示了如何打印有关该工具的起始和结束时间的信息。
import arcpy
arcpy.env.workspace = "D:/base/data.gdb"
arcpy.analysis.Clip("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 对象上的消息。 Result 对象支持多个用于获取和解释地理处理工具消息的相同函数。
Result 属性和方法
属性和方法 | 说明 |
---|---|
inputCount | 返回输入数目。 |
outputCount | 返回输出数目。 |
messageCount | 返回消息数目。 |
maxSeverity | 返回最大严重性。 返回的严重性可以为 0(未产生错误/警告)、1(产生了警告)或 2(产生了错误)。 |
resultID | 返回唯一结果 ID。 如果工具不是地理处理服务,则 resultID 将返回 ""。 |
status | 返回服务器上作业的状态。
|
cancel() | 取消服务器上的作业。 |
getAllMessages() | 返回消息类型、返回代码和消息字符串。 |
getInput(index) | 返回给定的输入。 如果是记录集或栅格数据对象,则返回 RecordSet 或 RasterData 对象。 |
getMapImageURL(parameter_list, height, width, resolution) | 获取给定输出的地图服务影像。 |
getMessage(index) | 按索引返回特定消息。 |
getMessages(severity) | 返回地理处理工具消息。 严重性值可以表示为 0(信息性)、1(警告)或 2(错误)。 如果未指定严重性值,则返回所有消息类型。 |
getOutput(index) | 返回给定的输出。 如果是记录集或栅格数据对象,则返回 RecordSet 或 RasterData 对象。 |
getSeverity(index) | 返回特定消息的严重性。 |
以下示例将运行两个地理处理工具,但要一直等到工具运行后才能查看消息。
import arcpy
arcpy.env.workspace = "D:/base/data.gdb"
# Run the Clip and GetCount tools
clipResult = arcpy.analysis.Clip("roads", "urban_area", "urban_roads")
countResult = arcpy.management.GetCount("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.mytools.BufferPoints(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())