Me gustaría ejecutar un script de Python a través de qgis --code myscript.py
y luego salir inmediatamente. Estoy usando iface.actionExit().trigger()
, que mata QGIS cuando lo ejecuto desde la consola de Python, pero no cuando pongo el script al que paso --code
.
¿Cuál es la forma correcta de salir inmediatamente? Estoy ejecutando QGIS 2.0.1
Actualización : también lo he intentado sys.exit()
. QGIS lo detecta y abre una ventana con lo siguiente:
An error occured during execution of following code:
execfile('myscript.py')
Traceback (most recent call last):
File "", line 1, in
File "myscript.py", line 14, in
sys.exit()
SystemExit
Actualización : os.kill(os.getpid(), 9)
funciona pero es un truco sucio y estoy buscando algo mejor.
--screenshot
bandera simplemente no lo corta).sys.exit()
en mis scripts que han funcionado.echo "sys.exit()" > code.py; qgis --code code.py
¿Qué versión de QGIS estabas ejecutando? ¿Cómo estabas invocando los guiones?Respuestas:
Prueba en tu guión:
Esto funciona para mi.
Nota de edición:
Basado en el comentario de Conley Owens, cambié ligeramente mi script para hacer "algo útil" (donde se comentó la línea que importaba iface ).
Corrí qgis --code myscript.py en la consola bash, dentro de la carpeta de la secuencia de comandos, e inmediatamente recibí este mensaje de error:
e indicando que desde qgis.utils import iface line es necesario.
Cuando no se comenta la primera línea, la ejecución del script no tuvo errores:
pero el control no estaba en la consola de Python; está en la consola bash (observe la impresión "Hola" allí). Por esta razón, su comando os.kill (os.getpid (), 9) funciona porque cierra la consola y cierra QGIS automáticamente.
La solución a este problema, si necesito la API PyQGIS fuera de QGIS, fue incluir PYTHONPATH a QGIS ( / usr / share / qgis / python ) en mi .bashrc y ejecutar el script en la consola bash como python myscript. py . Funciona.
En Windows, puede obtener PYTHONPATH en la Consola Python de QGIS con:
y use el Panel de control de Windows para cambiarlo.
fuente
--code
opción o solo desde la consola? ¿Qué versión de QGIS está ejecutando?python myscript.py
, ¿estás sugiriendo que use la API fuera de qgis donde tendría que manejar toda la sobrecarga de ejecutarQgsApplication.initQgis()
y cargar el proyecto? ¿yo mismo? Si es así, esta es una ruta completamente diferente.Me funciona bien hacer esto:
También es útil que pueda establecer un código de salida.
fuente