Во время работы инструмента создаются сообщения, которые можно получить с помощью функций геообработки, таких как GetMessages. Эти сообщения содержат, например, следующую информацию:
- время начала и окончания операции;
- используемые значения параметров;
- общую информацию о ходе операции (информационное сообщение);
- предупреждения о потенциальных проблемах (сообщение с предупреждением);
- ошибки, в результате которых инструмент прекращает работу (сообщение об ошибке).
Весь обмен информацией между инструментами и пользователями осуществляется посредством сообщений. В зависимости от того, откуда запускаются инструменты, сообщения отображаются в окне Результаты, в окне Python и в диалоговом окне хода выполнения. Из Python можно вставить эти сообщения в скрипт, изучить их, распечатать или записать в файл. Все сообщения обладают свойством важности – информационное сообщение, предупреждение или ошибка. Важность обозначается целым числом, где 0 = информационное сообщение, 1 = предупреждение и 2 = ошибка.
Важность | Описание |
---|---|
Информационное сообщение (важность = 0) | Информационное сообщение – это сведения о выполнении инструмента. Оно никогда не указывает на проблемы. Информационные сообщения содержат только общие сведения, такие как ход работы инструмента, время запуска или завершения работы инструмента, характеристики выходных данных или результаты применения инструмента. |
Сообщение с предупреждением (важность = 1) | Сообщения с предупреждениями создаются при возникновении ситуации, которая может стать причиной проблемы во время работы инструмента или когда может быть получен неожиданный результат. Например, при определении системы координат для набора данных, для которого уже задана система координат, будет выдано предупреждение. Получив предупреждение, можно принять необходимые меры, например, отменить запуск инструмента или выбрать другой параметр. |
Сообщение об ошибке (важность = 2) | Сообщения об ошибках указывают на критическое событие, которое нарушает работу инструмента. Ошибки возникают в случае недопустимых значений одного или нескольких параметров либо сбоя важного процесса или процедуры. |
И предупреждения и сообщения об ошибках дополняются шестизначным кодом-идентификатором. Эти коды-идентификаторы занесены в документы, содержащие дополнительные сведения об их причинах и необходимых действиях. Когда коды ошибок или предупреждений отображаются в диалоговом окне инструмента или хода выполнения, в окне 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())
Отдельные сообщения можно получить с помощью функции GetMessage. Эта функция имеет один параметр – значение индекса сообщения. Функция 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 | Возвращает статус работы на сервере.
|
cancel() | Отменяет работу на сервере. |
getInput(index) | Возвращает полученные входные данные. Если это набор записей или объект растровых данных, возвращаются соответственно объекты RecordSet или RasterData. |
getMapImageURL(ParameterList, 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"
# 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())