¿Cómo ejecutar un script de Python simple para QGIS desde afuera (por ejemplo, texto sublime)?

34

Me gustaría ejecutar algunos scripts de Python pequeños y simples para QGIS (Mac) desde "fuera" de QGIS. En este contexto me refiero a fuera, ya sea la línea de comando del sistema operativo normal (terminal.app) o incluso mejor, directamente desde Sublime Text (editor de texto), pero definitivamente no a través de la consola Python incorporada de QGIS.

He leído varios tutoriales, p. ej. enlace y puedo obtener una referencia a la aplicación QGIS, pero desafortunadamente no puedo qgis.utils.iface o algo más profundo. Este pequeño fragmento de código debería, por ejemplo, imprimir el nombre de la capa activa ... esto es lo que tengo:

    import sys
    sys.path.append("/Applications/QGIS.app/Contents/Resources/python")

    from qgis.core import *
    import qgis.utils

    print "helo" # console output: helo

    QgsApplication.setPrefixPath("/Applications/QGIS.app/", True)
    QgsApplication.initQgis()

    print QgsApplication # console output: <class 'qgis.core.QgsApplication'>

    print qgis.utils.iface # = console output: none

    aLayer = qgis.utils.iface.activeLayer()
    print aLayer.name()

    QgsApplication.exitQgis()

Por favor, no me responda ahora cómo crear un complemento u otra cosa "pesada". Solo busco una forma rápida y fácil de grabar scripts desde un editor de texto cómodo para QGIS.

    
pregunta Benedikt Groß 15.07.2012 - 18:50

3 respuestas

29

No puede obtener una referencia al objeto iface aquí porque no existe en este contexto. El objeto iface ( QgisInterface ) es un objeto de conveniencia para los complementos, o secuencias de comandos que se ejecutan dentro de QGIS, para acceder a los objetos principales, por ejemplo. El lienzo del mapa, la leyenda, el compositor, etc., y solo existe cuando la aplicación principal se está ejecutando.

Cuando creas un script de Python independiente utilizando las API de QGIS, no existe nada de esto porque estás creando tu propia aplicación de mapeo.

Hay tres situaciones diferentes:

  1. Un complemento de QGIS
  2. Un script que se ejecuta dentro de QGIS (no es un complemento) para la automatización
  3. aplicación independiente que utiliza las API de QGIS

1. y 2. tienen acceso a iface , el último no.

Para 3 , si desea crear un script que abra una capa en un lienzo de mapa, lo haría después de QgsApplication.initQgis()

map = QgsMapCanavs()
layer = QgsVectoryLayer('path.shp','myshapefile','ogr')
map.setLayerSet([layer])

Sin embargo, si realmente estás buscando algo como 2 , puedes escribir esto en tu editor de scripts

from qgis.core import *
from qgis.gui import *
import qgis.utils

qgis.utils.iface.activeLayer()

pero esto debe ejecutarse dentro de QGIS para que qgis.utils funcione. Esto se puede hacer poniendo el script en PATH y ejecutando import scriptname en la consola de Python o usando el complemento ScriptRunner.

Tenga en cuenta que lo siguiente no es QGIS todavía

Hay un número 4 que aún no se ha agregado, y esperamos que lo sea en el futuro, y esa es la opción para ejecutar QGIS con una línea de comando arg para decir ejecutar este código.

Por ejemplo:

qgis --code=mycodefile.py

Registro de complementos (versión 1.8)

Puede usar la clase QgsMessageLog para registrar información en la ventana de registro de QGIS. El signo de exclamación amarillo en la esquina inferior derecha.

from qgis.core import *
log = lambda m: QgsMessageLog.logMessage(m,'My Plugin') 
log('My message')

o sin usar lambda

QgsMessageLog.logMessage('My message', 'My Plugin')

Prefiero el basado en lambda, ya que es más corto y menos tecleado cada vez que quieres registrar algo.

    
respondido por el Nathan W 16.07.2012 - 03:53
14

Creo que la respuesta de Nathan W no está actualizada. Pude ejecutar QGIS (versión 2.6) scripts de python desde la línea de comandos (opción 4 de Nathan) usando los siguientes comandos.

man qgis
qgis -nologo --project /path/foo.qgs --code /path/foo.py
    
respondido por el jsta 13.11.2014 - 23:40
3

Actualización para la opción 4 de Nathan: (Windows, QGIS 2.18 Las Palmas)

Para imprimir el documento de ayuda de QGIS,

  

qgis --help

Para abrir QGIS, cargue un proyecto, luego, ejecute un script de python.

  

qgis --nologo --project c: /path/to/projfile.qgs --code c: /path/to/code.py

Estos comandos deben ejecutarse en OSGeo4W Shell sin problemas.

    
respondido por el swatchai 22.07.2017 - 19:35

Lea otras preguntas en las etiquetas