Основные сведения о типах и важности сообщений
Во время работы инструмента создаются сообщения, которые можно получить с помощью функций геообработки, таких как GetMessages(). Эти сообщения содержат, например, следующую информацию:
- время начала и окончания операции;
- используемые значения параметров;
- общую информацию о ходе операции (информационное сообщение);
- предупреждения о потенциальных проблемах (сообщение с предупреждением);
- ошибки, в результате которых инструмент прекращает работу (сообщение об ошибке).
Весь обмен информацией между инструментами и пользователями осуществляется посредством сообщений. В зависимости от того, откуда запускаются инструменты, сообщения отображаются в окне Результаты (Results), в окне Python и в диалоговом окне хода выполнения. Из Python можно вставить эти сообщения в скрипт, изучить их, распечатать или записать в файл. Все сообщения обладают свойством важности — информационное сообщение, предупреждение или ошибка. Важность обозначается целым числом, где 0 = информационное сообщение, 1 = предупреждение и 2 = ошибка.
Важность | |
---|---|
Информационное сообщение (важность = 0) |
Информационное сообщение — это всего лишь сведения о выполнении. Оно никогда не указывает на проблемы. Информационные сообщения содержат только общие сведения, такие как ход работы инструмента, время запуска или завершения работы инструмента, характеристики выходных данных или результаты применения инструмента. |
Сообщение с предупреждением (важность = 1) |
Сообщения с предупреждениями создаются при возникновении ситуации, которая может стать причиной проблемы во время работы инструмента или когда может быть получен неожиданный результат. Например, при определении системы координат для набора данных, для которого уже задана система координат, будет выдано предупреждение. Получив предупреждение, можно принять необходимые меры, например отменить запуск инструмента или выбрать другой параметр. |
Сообщение об ошибке (важность = 2) |
Сообщения об ошибках указывают на критическое событие, которое нарушает работу инструмента. Ошибки возникают в случае недопустимых значений одного или нескольких параметров или сбоя важного процесса или процедуры. |
И предупреждения и сообщения об ошибках дополняются шестизначным кодом-идентификатором. Эти коды-идентификаторы занесены в документы, содержащие дополнительные сведения об их причинах и необходимых действиях. Когда коды ошибок или предупреждений отображаются в диалоговом окне инструмента или хода выполнения, в окне Python или в окне Результат (Result), они содержат ссылку, которая позволяет напрямую получить дополнительную справку по этому сообщению.
Получение сообщений
Сообщения от последнего запущенного инструмента сохраняются в 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)
Получение сообщений от объекта Result
Сообщения от инструмента можно также получить с помощью объекта Result. В отличие от сообщений, получаемых от ArcPy, при использовании объекта Result сообщения можно сохранять даже после запуска нескольких инструментов. Объект Result поддерживает ряд тех же функций, которые применяются для получения и интерпретации сообщений от инструментов геообработки.
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.
|
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. |
В приведенном ниже примере выполняется запуск двух инструментов геообработки, затем следует ожидание окончания их работы и просмотр сообщений.
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()