Основные сведения о типах и важности сообщений
Во время работы инструмента создаются сообщения, которые можно получить с помощью функций геообработки, таких как 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 поддерживает ряд тех же функций, которые применяются для получения и интерпретации сообщений от инструментов геообработки.
Свойства и методы |
Описание |
---|---|
inputCount | Возвращает количество входных данных. |
outputCount |
Возвращает количество выходных данных. |
messageCount |
Возвращает количество сообщений. |
maxSeverity |
Возвращает максимальное значение серьезности. Возвращенное значение серьезности может быть 0 (нет ошибок/имеются предупреждения), 1 (имеются предупреждения) или 2 (имеются ошибки). |
resultID |
Возвращает уникальный ID результата. Если инструмент не является сервисом геообработки resultID будет иметь вид "". |
Статус |
Возвращает статус работы на сервере.
|
cancel() |
Отменяет работу на сервере. |
getInput(индекс) |
Возвращает полученные входные данные. Если это набор записей или объект растровых данных, возвращаются соответственно объекты RecordSet или RasterData. |
getMapImageURL(список_параметров, высота, ширина, разрешение) |
Получает изображение картографического сервиса для полученных выходных данных. |
getMessage(индекс) |
Возвращает определенное сообщение. |
getMessages(степень серьезности) |
Тип возвращаемых сообщений: 0=сообщение, 1=предупреждение, 2=ошибка. Если значение не задано, возвращаются сообщения всех типов. |
getOutput(индекс) |
Возвращает полученные выходные данные. Если это набор записей или объект растровых данных, возвращаются соответственно объекты RecordSet или RasterData. |
getSeverity(индекс) |
Возвращает серьезность указанного сообщения. |
В приведенном ниже примере выполняется запуск двух инструментов геообработки, затем следует ожидание окончания их работы и просмотр сообщений.
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()