Estoy un poco atascado tratando de descubrir la forma de ejecutar sextante desde una pitón independiente de la distribución OSGeo4W. La razón por la que quiero hacer esto es porque me cansé de ingresar parámetros en el cuadro de diálogo cada vez que quiero probar un modelo de Model Builder.
Así que aquí está el script de Python, llamémoslo 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")
Que estoy llamando desde mi archivo por lotes
@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
El problema es que dice, Algorithm not found
mientras que obtengo resultados significativos de la consola QGIS python.
Siento que me falta para inicializar algo. ¿Pero que?
¿Existe una mejor manera de probar un modelo que no sea mediante la introducción de toneladas de parámetros utilizando la GUI?
ACTUALIZACIÓN 7/2/2012
Estoy buscando una solución pitónica genérica para probar con algoritmos "míos". El algoritmo mencionado anteriormente es solo un ejemplo que muestra que algo probablemente no se inicializó.
ACTUALIZACIÓN 27/07/2012
Una alternativa a Script Runner es usar la consola IPython para depurar scripts. Aparte de eso, no parece haber una forma de hacer pruebas unitarias simples con sextante sin nada más en ejecución :(
ACTUALIZACIÓN 30/07/2012
Como sugiere Victor Olaya, trato de inicializar Sextante como en el código a continuación.
#!/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()
Sin embargo me sale algo como
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'
Bueno ... todo se convierte en una discusión de la lista de correo por igual. Quizás valga la pena pasar a qgis-user o qgis-developer en lugar de SE.
iface
en un script QGIS independiente.iface
solo es útil cuando se ejecuta en QGIS lateral.