Я немного застрял, пытаясь выяснить способ запуска 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.