Я немного застрял, пытаясь выяснить способ запуска sextante из автономного питона из дистрибутива OSGeo4W. Причина, по которой я хочу это сделать, заключается в том, что я устал вводить параметры в диалоговом окне каждый раз, когда хочу протестировать модель из Model Builder.
Итак, вот скрипт Python давайте назовем его test.py
# as per http://qgis.org/pyqgis-cookbook/intro.html#using-pyqgis-in-custom-application
from qgis.core import *
# supply path to where is your qgis installed
QgsApplication.setPrefixPath("C:/OSGeo4W/apps/qgis", True)
# load providers
QgsApplication.initQgis()
from sextante.core.Sextante import Sextante
Sextante.alglist()
Sextante.alghelp("saga:slopeaspectcurvature")
Что я звоню из моего пакетного файла
@echo off
set OSGEO4W_ROOT=C:\OSGeo4W
set PYTHONPATH=%OSGEO4W_ROOT%\apps\qgis\python;%OSGEO4W_ROOT%\apps\qgis\python\plugins;%HOME%/.qgis/python/plugins
set PATH=%OSGEO4W_ROOT%\bin;%OSGEO4W_ROOT%\apps\qgis\bin;%OSGEO4W_ROOT%\apps\qgis\plugins
python test.py
Проблема в том, что он говорит, Algorithm not found
тогда как я получаю значимый вывод из консоли Python QGIS.
Я чувствую, что мне не хватает чего-то инициализировать. Но что?
Есть ли лучший способ проверить модель, кроме как путем ввода тонны параметров с помощью графического интерфейса?
ОБНОВЛЕНИЕ 2/2/2012
Я ищу общее питоническое решение для тестирования с "моими" алгоритмами. Вышеупомянутый алгоритм - просто пример, показывающий, что что-то, вероятно, не было инициализировано.
ОБНОВЛЕНИЕ 27/27/2012
Альтернативой Script Runner является использование консоли IPython для отладки сценариев. Кроме этого, похоже, нет способа выполнить простое модульное тестирование с секстанте, когда больше ничего не работает :(
ОБНОВЛЕНИЕ 30/30/2012
Как предполагает Виктор Олайя, я пытаюсь инициализировать Sextante, как показано в коде ниже.
#!/usr/bin/env python
import sys
from PyQt4.QtGui import QApplication
from sextante.core.Sextante import Sextante
def main():
""" main function or something """
# as per http://qgis.org/pyqgis-cookbook/intro.html#using-pyqgis-in-custom-application
from qgis.core import *
import qgis.utils
app = QApplication(sys.argv)
# supply path to where is your qgis installed
QgsApplication.setPrefixPath("C:/OSGeo4W/apps/qgis", True)
# load providers
QgsApplication.initQgis()
# how???
# qgis.utils.iface = QgisInterface.instance()
Sextante.initialize()
run_script(qgis.utils.iface)
def run_script(iface):
""" this shall be called from Script Runner"""
Sextante.alglist()
Sextante.alghelp("saga:slopeaspectcurvature")
if __name__=="__main__":
main()
Однако я получаю что-то вроде
Traceback (most recent call last):
File "test.py", line 29, in
main()
File "test.py", line 20, in main
Sextante.initialize()
File "C:\Documents and Settings\user\.qgis\python\plugins\sextante\core\Sextante.py", line 94, in initialize
Sextante.addProvider(GrassAlgorithmProvider())
File "C:\Documents and Settings\user\.qgis\python\plugins\sextante\grass\GrassAlgorithmProvider.py", lin
e 17, in __init__
self.actions.append(DefineGrassRegionAction())
File "C:\Documents and Settings\user\.qgis\python\plugins\sextante\grass\DefineGrassRegionAction.py", li
ne 16, in __init__
canvas = QGisLayers.iface.mapCanvas()
AttributeError: 'NoneType' object has no attribute 'mapCanvas'
Ну ... все это становится обсуждением списка рассылки. Возможно, стоит перейти к qgis-user или qgis-developer вместо SE.
iface
в автономном скрипте QGIS.iface
используется только при работе в боковой QGIS.Ответы:
Вы можете создать свой сценарий для работы с плагином Script Runner Гэри Шермана и запустить его из QGIS. Повторный запуск скрипта после редактирования должен побудить Script Runner перезагрузить модуль и отразить ваши изменения. Смотрите также: список plugins.qgis.org для скриптов- бегунов .
Главное, чтобы у вас была функция run_script, которая вызывается Script Runner (пример из его блога):
источник
AttributeError: 'module' object has no attribute 'run_script'
и настаивает на том, что у меня нет строк документации, которые я могу видеть в просмотрщике исходного кода.def run_script(iface)
функцию? Ваш скрипт не будет работать в Script Runner без этого.__import__
область видимости могла быть ограничена, вместо того, чтобы смотреть по сторонамsys.path
. Показывает строку документации и список других функций.Sextante должен быть инициализирован, поэтому он загружает алгоритмы и может позже выполнить их.
Вызовите Sextante.initialize (), прежде чем делать что-либо.
источник
Для новых пользователей, читающих этот пост, есть способ запуска алгоритмов обработки QGIS в автономных скриптах PyQGIS. Проверьте ответы на Ошибка импорта для qgis.core при запуске сценария оболочки OSGeo4w и Как я могу получить доступ к `обработке` с помощью Python? , которые предоставляют вам проверенные примеры.
источник
Поскольку алгоритм, который вы хотите использовать, является частью саги, вы можете использовать сагу напрямую.
например, из пакетного файла:
источник
Согласно Как запустить простой питон скрипт для QGIS из вне (например Sublime Text)? Вы не можете получить ссылку на
iface
объект здесь, потому что он не существует в этом контексте, так как он запускается вне QGIS. Какой-либо прогресс?источник