Типы и важность сообщений

Во время работы инструмента создаются сообщения, которые можно получить с помощью таких функций геообработки, как GetMessages и GetAllMessages. Эти сообщения содержат, например, следующую информацию:

  • время начала и окончания операции;
  • используемые значения параметров;
  • общую информацию о ходе операции (информационное сообщение);
  • предупреждения о потенциальных проблемах (сообщение с предупреждением);
  • Ошибки, в результате которых инструмент прекращает работу (сообщение об ошибке)

Весь обмен информацией между инструментами и пользователями осуществляется посредством сообщений. В зависимости от того, откуда запускаются инструменты, сообщения отображаются в окне Результаты, в окне Python и в диалоговом окне хода выполнения. Из Python можно вставить эти сообщения в скрипт, изучить их, распечатать или записать в файл. Все сообщения обладают свойством важности – информационное сообщение, предупреждение или ошибка. Важность обозначается целым числом, где 0 = информационное сообщение, 1 = предупреждение и 2 = ошибка.

ВажностьОписание

Информационное сообщение (важность = 0)

Информационное сообщение – это сведения о выполнении инструмента. Оно никогда не указывает на проблемы. Информационные сообщения содержат только общие сведения, такие как ход работы инструмента, время запуска или завершения работы инструмента, характеристики выходных данных или результаты применения инструмента.

Сообщение с предупреждением (важность = 1)

Сообщения с предупреждениями создаются при возникновении ситуации, которая может стать причиной проблемы во время работы инструмента или когда может быть получен неожиданный результат. Например, при определении системы координат для набора данных, для которого уже задана система координат, будет выдано предупреждение. Получив предупреждение, можно принять необходимые меры, например, отменить работу инструмента или выбрать другой параметр.

Сообщение об ошибке (важность = 2)

Сообщения об ошибках указывают на критическое событие, которое нарушает работу инструмента. Ошибки возникают в случае недопустимых значений одного или нескольких параметров либо сбоя важного процесса или процедуры.

И предупреждения и сообщения об ошибках дополняются шестизначным кодом-идентификатором. Эти коды-идентификаторы занесены в документы, содержащие дополнительные сведения об их причинах и необходимых действиях. Когда коды ошибок или предупреждений отображаются в диалоговом окне инструмента или хода выполнения, в окне Python или в окне Результат, они содержат ссылку, которая позволяет напрямую получить дополнительную справку по этому сообщению.

Доступ к сообщениям

Сообщения последнего запущенного инструмента могут быть получены при помощи функции GetMessages или GetAllMessages.

Функция GetMessages возвращает одну строку, содержащую все сообщения последнего выполненного инструмента. Можно провести фильтрацию полученных сообщений, отобрав из них только сообщения с определенным уровнем важности при помощи соответствующего параметра. Первое и последнее сообщения инструмента всегда содержат информацию о времени начала и окончания работы инструмента, соответственно.

Доступ к сообщениям геообработки с помощью 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 возвращает список списков, содержащих тип сообщения, коды возврата и строки сообщений для всех сообщений из инструмента, который был запущен ранее. Первое и последнее сообщения инструмента всегда содержат информацию о времени начала и окончания работы инструмента, соответственно.

Доступ к сообщениям геообработки с помощью 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 поддерживает ряд тех же функций, которые применяются для получения и интерпретации сообщений от инструментов геообработки.

Свойства и методы Result

Свойства и методыОбъяснение

inputCount

Возвращает количество входных данных.

outputCount

Возвращает количество выходных данных.

messageCount

Возвращает количество сообщений.

maxSeverity

Возвращает максимальное значение серьезности. Возвращенное значение серьезности может быть 0 (нет ошибок/имеются предупреждения), 1 (имеются предупреждения) или 2 (имеются ошибки).

resultID

Возвращает уникальный ID результата. Если инструмент не является сервисом геообработки, resultID будет иметь вид "".

status

Возвращает статус работы на сервере.

  • 0 – Создать
  • 1 – Подтверждено
  • 2 – Ожидание
  • 3 – Выполняется
  • 4 – Выполнено удачно
  • 5 – Выполнено неудачно
  • 6 – Время истекло
  • 7 – Выполняется отмена
  • 8 – Отменено
  • 9 – Удаление
  • 10 – Удалено

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)

Возвращает важность указанного сообщения.

Свойства и методы Result

В приведенном ниже примере выполняется запуск двух инструментов геообработки, затем следует ожидание окончания их работы и просмотр сообщений.


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