Comment quitter QGIS après avoir exécuté un script python?

10

Je voudrais exécuter un script python via qgis --code myscript.pypuis quitter immédiatement. J'utilise iface.actionExit().trigger(), ce qui tue QGIS lorsque je l'exécute à partir de la console python, mais pas lorsqu'il est placé dans le script auquel je passe --code.

Quelle est la bonne façon de quitter immédiatement? J'utilise QGIS 2.0.1

Mise à jour : j'ai également essayé sys.exit(). QGIS l'attrape et ouvre une fenêtre avec les informations suivantes:

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

Mise à jour : os.kill(os.getpid(), 9)fonctionne mais c'est un hack sale et je cherche quelque chose de mieux.

Conley Owens
la source
1
Vous pouvez mais pourquoi?
Nathan W
1
Je fais automatiquement un pdf avec un compositeur d'impression (le --screenshotdrapeau ne le coupe tout simplement pas).
Conley Owens
Pourriez-vous inclure votre code dans la question, car cela pourrait aider les répondeurs potentiels? Je pose cette question car j'ai également utilisé sys.exit()dans mes scripts qui ont fonctionné.
Joseph
echo "sys.exit()" > code.py; qgis --code code.pyQuelle version de QGIS utilisiez-vous? Comment invoquiez-vous les scripts?
Conley Owens

Réponses:

5

Essayez dans votre script:

from qgis.utils import iface

#your code here

iface.actionExit().trigger()

Ça marche pour moi.

Note d'édition:

Basé dans le commentaire de Conley Owens, j'ai légèrement modifié mon script pour faire "quelque chose d'utile" (où la ligne qui importe iface a été commentée).

#from qgis.utils import iface
import os

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

iface.actionExit().trigger()

J'ai exécuté qgis --code myscript.py sur la console bash, à l'intérieur du dossier du script, et j'ai immédiatement reçu ce message d'erreur:

entrez la description de l'image ici

et indiquant que depuis qgis.utils, l'importation d'une ligne iface est nécessaire.

Lorsque la première ligne n'est pas commentée, l'exécution du script n'a pas eu d'erreurs:

entrez la description de l'image ici

mais le contrôle n'était pas dans la console Python; il se trouve dans la console bash (observez l'impression "Bonjour" là-bas). Pour cette raison, votre commande os.kill (os.getpid (), 9) fonctionne car fermez la console et fermez automatiquement QGIS.

La solution à ce problème, si j'avais besoin de l'API PyQGIS en dehors de QGIS, c'était d'inclure le PYTHONPATH vers QGIS ( / usr / share / qgis / python ) dans mon .bashrc et d'exécuter le script dans la console bash en tant que myscript python. py . Ça marche.

Sous Windows, vous pouvez obtenir le PYTHONPATH dans la console Python de QGIS avec:

import os
os.getcwd()

et utilisez le Panneau de configuration de Windows pour le changer.

xunilk
la source
1
Je l'ai essayé (comme indiqué dans la question d'origine). Ça ne marche pas. Avez-vous réellement essayé cela depuis l' --codeoption ou uniquement depuis la console? Quelle version de QGIS utilisez-vous?
Conley Owens
Veuillez consulter ma "Note d'édition".
xunilk
1
Merci pour l'aide, mais je ne sais pas ce que vous voulez dire en exécutant le script dans la console bash python myscript.py, suggérez-vous d'utiliser l'api en dehors de qgis où je devrais alors gérer tous les frais généraux liés à l'exécution QgsApplication.initQgis()et au chargement du projet moi même? Si c'est le cas, cela va dans une voie entièrement différente.
Conley Owens
1

Cela fonctionne bien pour moi de le faire:

import os
os._exit(0)

Il est également utile que vous puissiez définir un code de sortie.

Marioba
la source