Отладка скриптов ArcPy?

50

Я написал много скриптов Python с использованием ArcPy в ArcGIS 10, и до сих пор мой единственный способ отладки ограничен печатью сообщений с использованием окна результатов геообработки arcpy.AddMessage().

Есть ли другие варианты, такие как установка точек останова?

Метод Джейсона прекрасно работает. Если у вас есть ошибка в вашем наборе инструментов, такая как проверка, ваша IDE, вероятно, не сможет точно определить проблему, потому что наборы инструментов закодированы. По крайней мере, WING не смог точно это определить.

дубильщик
источник
Может быть вариант здесь? код gys pyscripter
Брэд Несом
В справке ArcGIS обсуждается, как использовать отладчик в PythonWin
Regan Sarwas
В свойствах файла ОС вы пробовали установить программу по умолчанию для файлов .py в PyScripter?
KiloGeo
Делая это, я не буду эффективно сообщать ОС, что я не хочу запускать свой скрипт на Python, а просто открыть его в редакторе?
RyanDalton
Да исправить. Извините, я неправильно понял вашу цель.
KiloGeo

Ответы:

37

Обычно отладчики / IDE Python предполагают, что скрипт Python выполняется в том же процессе, что и сам, поэтому отладка скрипта, запущенного в ArcMap.exe, не вызывает затруднений - вам нужно получить достаточно среды сценариев GP, загруженной в скрипт Python, как вы можете отладить с.

Метод, который очень хорошо работал для меня в течение последних нескольких лет, - это написать простой скрипт, который просто вызывает инструмент, и использовать его в качестве основного сценария в Python IDE (Wing или Pythonwin), а мои точки останова установить в .py инструмента. файл также открыть в том же сеансе IDE.

Так что в основном я делаю это:

  1. Получить набор входных данных, которые не работают в моем скрипте
  2. Откройте простой .py файл в той же папке, что и .tbx, который вызывает инструмент
  3. Откройте скрипт вызывающего абонента и файл .py инструмента скрипта в IDE.
  4. Установить точки останова в файле скрипта
  5. Запустите скрипт вызова

И мой скрипт вызова обычно довольно прост:

import os
import arcpy
arcpy.ImportToolbox(os.path.join(os.path.dirname(__file__), 'my.tbx'))
arcpy.MyToolThatIsFailing_myalias("inputs", "that", "don't" "work")

Я пробовал winpdb для отладки скриптов, работающих в ArcMap, но мне никогда не везло. Если вы хотите попробовать это, и у вас это получается хорошо, поделитесь своими выводами.

Джейсон Шайрер
источник
1
отличное решение! Я попробую.
Джордж Сильва
В прошлом я успешно использовал winpdb для отладки длинных сценариев. После установки winpdb вы можете «заскочить» в текущий запущенный автономный скрипт или теоретически в другой процесс, такой как ArcMap, и отладить его в обычном режиме. Это было очень удобно для проверки сценария, выполнение которого заняло бы недели. Я не пробовал отлаживать arcpy в процессе приложения ArcGIS.
blah238
Я бы порекомендовал PyCharm. работает как по волшебству
user39901230
26

Вы можете изменить его в диалоговом окне параметров GP, просто укажите свой исполняемый файл для редактора / отладчика.

Диалог настроек GP

Джейсон Шайрер
источник
Это выглядит как новое улучшение для ArcGIS 10, верно? Я не вижу этот параметр настройки для 9.3.
RyanDalton
Правильно, новое в 10.
Джейсон Шейрер
9

Для пользователей 10 лет, очевидно, лучший путь - это сообщение Джейсона, которое я пометил как «лучший ответ». Для пользователей 9.3 я смог выполнить инструкции по поддержке ESRI KB, ссылки на которые есть в сообщении Брэда.

В конечном итоге ключом к редактированию скриптов Python ArcGIS в Pyscripter по умолчанию было редактирование «действия» системы для «зарегистрированных типов файлов», оканчивающихся на * .py файлы (шаг # 4). Я создал новый тип действия «Изменить», а затем включил путь Pyscripter.exe. Как только я это сделал, стандартное действие редактирования было настроено так, чтобы запускать Pyscripter вместо IDLE.

Я использовал строку (потому что она была обрезана в диалоговом окне, показанном ниже):

"C:\Program Files\PyScripter\PyScripter.exe" "%1"

введите описание изображения здесь

RyanDalton
источник
1
+1 за ответ, и еще раз, если можно, за включение строки, а не только изображения (текст намного проще копировать и вставлять!).
Мэтт Уилки
7

Я не знаю, как это будет работать с arcpy, но вы можете попробовать pdb :

import pdb; pdb.set_trace()
NW1
источник
есть похожая функциональность для pydev с eclipse, которая описана здесь. Вы устанавливаете eclipse для прослушивания сигнала и можете запускать его в коде, работающем полностью вне eclipse, с помощью вызова функции pydevd.settrace (). urbansim.org/Documentation/DebuggingWithEclipse
АКО
0

Самый простой способ отладки моего кода - это жесткий код моих входных данных в путь к файлу существующего набора данных. Например:

import arcpy

# parameters for script
#input1 = arcpy.GetParameterAsText(0) # layer
#input2 = arcpy.GetParameterAsText(1) # folder

# debugging parameters
input1 = r"path/to/your/data.shp"
input2 = r"path/to/your/folder"

В дополнение к окну результатов, окно Python выдает полезные сообщения об ошибках и / или позволяет тестировать фрагменты кода.

Любая хорошая IDE имеет отладочный зонд, который будет иметь в памяти всю вашу обработку до текущей точки останова. При этом вы можете увидеть, что происходит с данными. Установите точки останова, где вы хотите приостановить сценарий. Используйте условные точки останова, если вы хотите остановить цикл на определенной итерации. Кроме того, узнайте свои версии Arc и какие функции доступны для этих версий.

gisdude
источник