Выполнить скрипт в окне Python ArcMap?

10

Я писал Python в своем текстовом редакторе, поэтому у меня есть скрипт Python, script.py. Я все еще занимаюсь его разработкой, поэтому пока не хочу помещать его в свой набор инструментов, и на данный момент это означает копирование и вставку его из моего текстового редактора в окно Python в ArcGIS Desktop.

Есть ли команда, которая позволяет мне вызывать ее из окна ArcGIS Python?

Что-то вроде:

run script.py

Кажется логичным, что оно должно существовать, но, возможно, нет.

whatahitson
источник
Вы строите свой скрипт в текстовом редакторе? Получите себе бесплатную версию, это будет лучшее, что вы когда-либо будете делать!
Хорнбидд

Ответы:

17

Вы могли бы использовать execfile.

Например,

>>> execfile(r'c:\my\script.py')
Джейсон Шайрер
источник
4

Я не уверен в вашем уровне опыта, но прежде чем вы зайдете слишком далеко, вы захотите изучить некоторые лучшие практики в Python. Было бы более идиоматичным, или « Pythonic », модульно преобразовать ваш код в функции / классы , importваш модуль и вызвать одну или несколько функций / классов.

Если вы хотите внести изменения и в интерактивном режиме протестировать уже импортированный модуль, вы можете использовать reloadвстроенную функцию.

Используйте if __name__ == '__main__'трюк, чтобы защитить основную процедуру вашего сценария (все, кроме импорта, объявлений функций / классов и, возможно, некоторых объявлений на уровне модуля) от автоматического запуска при импорте модуля, и выполнять эту логику только при непосредственном запуске сценария, например, из командная строка или через ArcToolbox.

Затем вы можете протестировать определенные части вашего модуля, просто вызвав соответствующие классы / функции.

blah238
источник
1
Затем вы должны разобраться с reload()функцией и всей мерзостью кеширования модулей и тому подобного в Python. Если вы итеративно пишете какой-то небольшой скрипт в текстовом редакторе, это немного излишне.
Джейсон Шайрер
1
У меня не было никаких проблем, reloadпока я не использую from module import xили from module import *.
blah238