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.Respuestas:
Puede crear su script para que funcione con el complemento Script Runner de Gary Sherman y ejecutarlo desde QGIS. Volver a ejecutar el script, después de editarlo, debe solicitar a Script Runner que vuelva a cargar el módulo y refleje sus cambios. Vea también: Listado de plugins.qgis.org de Script Runner .
Lo esencial es asegurarse de tener una función run_script, que es ejecutada por Script Runner (ejemplo de su blog):
fuente
AttributeError: 'module' object has no attribute 'run_script'
e insistiendo en que no tengo cadenas de documentos que pueda ver en el visor de origen.def run_script(iface)
función? Su script no se ejecutará en Script Runner sin eso.__import__
alcance se puede restringir en lugar de mirar por todas partessys.path
. Muestra docstring y una lista de otras funciones.Sextante tiene que ser inicializado, por lo que carga los algoritmos y luego puede ejecutarlos.
Llame a Sextante.initialize () antes de hacer algo.
fuente
Para los nuevos usuarios que leen esta publicación, hay una forma de ejecutar algoritmos de procesamiento QGIS en scripts PyQGIS independientes. Verifique las respuestas al error de importación para qgis.core al ejecutar el script de shell OSGeo4w y ¿Cómo puedo acceder al 'procesamiento' con Python? , que le proporcionan ejemplos probados.
fuente
Dado que el algoritmo que desea usar es parte de saga, puede usar saga directamente.
por ejemplo, de un archivo por lotes:
fuente
De acuerdo con ¿Cómo ejecutar un script python simple para QGIS desde afuera (por ejemplo, Sublime Text)? No puede obtener una referencia al
iface
objeto aquí porque no existe en este contexto ya que se está ejecutando fuera de QGIS. ¿Cualquier progreso?fuente