Come uscire da QGIS dopo aver eseguito uno script Python?


10

Vorrei eseguire uno script Python tramite qgis --code myscript.pye quindi uscire immediatamente. Sto usando iface.actionExit().trigger(), il che uccide QGIS quando lo eseguo dalla console Python, ma non quando lo inserisco nello script a cui passo --code.

Qual è il modo giusto per uscire immediatamente? Sto eseguendo QGIS 2.0.1

Aggiornamento : ho anche provato sys.exit(). QGIS lo rileva e apre una finestra con le seguenti:

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

Aggiornamento : os.kill(os.getpid(), 9)funziona ma è un trucco sporco e sto cercando qualcosa di meglio.


1
Puoi ma perché?
Nathan W,

1
Sto realizzando automaticamente un pdf con un compositore di stampa (la --screenshotbandiera non lo taglia).
Conley Owens,

Potresti includere il tuo codice nella domanda per favore in quanto ciò potrebbe aiutare i potenziali risponditori? Lo chiedo come ho usato anche sys.exit()nei miei script che hanno funzionato.
Joseph,

echo "sys.exit()" > code.py; qgis --code code.pyQuale versione di QGIS stavi eseguendo? Come stavi invocando gli script?
Conley Owens,

Risposte:


5

Prova nel tuo script:

from qgis.utils import iface

#your code here

iface.actionExit().trigger()

Per me funziona.

Nota di modifica:

Basato sul commento di Conley Owens, ho modificato leggermente la mia sceneggiatura per fare "qualcosa di utile" (in cui è stata commentata la riga che importa iface ).

#from qgis.utils import iface
import os

os.system('clear')
print "Hello"

iface.actionExit().trigger()

Ho eseguito qgis --code myscript.py nella console di bash, all'interno della cartella dello script, e subito ho ricevuto questo messaggio di errore:

inserisci qui la descrizione dell'immagine

e indicando che da qgis.utils è necessaria l' importazione della riga iface .

Quando la prima riga non è commentata, l'esecuzione dello script non ha avuto errori:

inserisci qui la descrizione dell'immagine

ma il controllo non era nella console Python; è nella console bash (osservare la stampa "Hello" lì). Per questo motivo il tuo comando os.kill (os.getpid (), 9) funziona perché chiudi la console e chiudi automaticamente QGIS.

La soluzione a questo problema, se ho bisogno dell'API PyQGIS al di fuori di QGIS, era includere PYTHONPATH in QGIS ( / usr / share / qgis / python ) nel mio .bashrc ed eseguire lo script nella console bash come myscript python. py . Funziona.

In Windows, puoi ottenere PYTHONPATH nella console Python di QGIS con:

import os
os.getcwd()

e utilizzare il Pannello di controllo di Windows per modificarlo.


1
L'ho provato (come notato nella domanda originale). Non funziona Hai effettivamente provato questo --codedall'opzione o solo dalla console? Quale versione di QGIS stai utilizzando?
Conley Owens,

Si prega di consultare la mia "nota di modifica".
xunilk,

1
Grazie per l'aiuto, ma non sono sicuro di cosa intendi eseguendo lo script nella console bash come python myscript.py, stai suggerendo di usare l'api al di fuori di qgis dove dovrei quindi gestire tutto il sovraccarico di esecuzione QgsApplication.initQgis()e caricamento del progetto me stessa? In tal caso, sta seguendo una strada completamente diversa.
Conley Owens,

1

Per me funziona bene:

import os
os._exit(0)

È anche utile impostare un codice di uscita.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.