40 votos

Ejecución de un sencillo script de Python para QGIS desde el exterior

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

He leído varios tutoriales, por ejemplo http://www.qgis.org/pyqgis-cookbook/intro.html#python-applications y puedo obtener una referencia a la aplicación QGIS, pero lamentablemente no a 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()

Sólo estoy buscando una manera rápida y fácil de disparar las secuencias de comandos de un cómodo editor de texto a QGIS.

38voto

Jauder Ho Puntos 3172

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

Cuando creas un script independiente de Python usando las APIs de QGIS nada de esto existe porque estás haciendo tu propia aplicación de mapas.

Hay tres situaciones diferentes:

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

1. y 2. tienen acceso a iface El último no lo hace.

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

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

Sin embargo, si realmente está buscando algo como 2 entonces 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 tiene que ser ejecutado dentro de QGIS para qgis.utils a trabajar. Eso se puede hacer poniendo el script en PATH y corriendo import scriptname en la consola de Python o utilizando el plugin ScriptRunner.

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

Hay un número 4 que aún no se ha añadido, y esperemos que lo haga en el futuro, y es la opción de ejecutar QGIS con un argumento de línea de comandos para decir que se ejecute este código.

Por ejemplo:

qgis --code=mycodefile.py

Registro de plugins (versión 1.8)

Puede utilizar 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 utilizar lambda

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

Yo prefiero el basado en lambda ya que es más corto y se escribe menos cada vez que se quiere registrar algo.

15voto

Michal Stefanow Puntos 106

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

man qgis
qgis -nologo --project /path/foo.qgs --code /path/foo.py

8voto

Nasir Puntos 2363

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 y, a continuación, ejecute un script de python.

qgis --nologo --project c:/ruta/al/archivo_de_proyecto.qgs --code c:/ruta/al/code.py

Estos comandos deberían funcionar en OSGeo4W Shell sin problemas.

QGIS 3.18 también funciona. Utilice siempre este comando para ver todas las opciones disponibles y la sintaxis de las mismas:-.

qgis --help

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X