Налагодження сценаріїв ArcPy?


50

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

Чи є інші варіанти, такі як встановлення точок перерви?

Метод Джейсона чудово працює. Якщо у вашій панелі інструментів є помилка, наприклад, перевірка, IDE, ймовірно, не зможе точно визначити проблему, оскільки коробки інструментів закодовані. Принаймні, WING не змогли точно визначити це.


Може тут варіант? code google pyscripter
Бред Несом

У ArcGIS допомогу розповідається , як використовувати відладчик в PythonWin
Regan Sarwas

У властивостях файлу ОС ви намагалися встановити програму за замовчуванням для .py-файлів на PyScripter?
KiloGeo

Роблячи це, чи не я би ефективно сказав ОС, що я не хочу запускати свій скрипт python, а просто відкрити його в редакторі?
RyanDalton

Так вірно. Вибачте, що я неправильно зрозумів ваше призначення.
KiloGeo

Відповіді:


37

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

Метод, який працював для мене дуже добре протягом останніх кількох років, - це написати простий скрипт, який просто викликає інструмент, і використовувати його в якості мого основного скрипту в IDE Python (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. працює як магія
користувач39901230

26

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

Діалогове вікно налаштувань GP


Схоже, це нове вдосконалення для ArcGIS 10, правда? Я не бачу цього параметра налаштування для 9.3.
RyanDalton

Правильно, нове в 10.
Jason Scheirer

9

Для користувачів 10 років, очевидно, найкращий маршрут - посада Джейсона, яку я позначив як "найкращу відповідь". Користувачам версії 9.3 я зміг дотримуватися інструкцій служби підтримки ESRI KB, що містяться в публікації Бреда, щоб працювати.

Зрештою, ключовим способом домогтися редагування сценаріїв ArcGIS python у Pyscripter було редагування системних "дій" для "зареєстрованих типів файлів", що закінчуються на файлах * .py (крок №4). Я створив новий тип дії "Редагувати", а потім включив шлях Pyscripter.exe. Як тільки я це зробив, за замовчуванням дія редагування була налаштована на запуск Pyscripter замість IDLE.

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

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

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


1
+1 для відповіді, і ще раз, якщо можна, за включення рядка, а не просто зображення (текст набагато простіше скопіювати та вставити!).
matt wilkie

7

Я не знаю, як це буде працювати з arcpy, але ви можете спробувати pdb :

import pdb; pdb.set_trace()

є аналогічна функціональність для pydev з затемненням, яка описана тут. Ви встановлюєте затемнення для прослуховування сигналу, і ви можете викликати це в коді, що працює повністю поза затемненням, за допомогою виклику функції 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"

Окрім вікна результатів, вікно пітона дає корисні повідомлення про помилки та / або дозволяє перевірити фрагменти коду.

У будь-якого хорошого IDE є датчик налагодження, який матиме в пам’яті всю вашу обробку до поточної точки пробою. З цим ви можете бачити, що відбувається з даними. Встановіть точки перерви, де потрібно призупинити сценарій. Використовуйте умовні точки перерви, якщо ви хочете зупинити цикл на певній ітерації. Також знайте ваші версії Arc та які функції доступні для цих версій.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.