Jak wyjść z QGIS po uruchomieniu skryptu python?

10

Chciałbym uruchomić skrypt Pythona, qgis --code myscript.pya następnie natychmiast wyjść. Używam iface.actionExit().trigger(), który zabija QGIS, gdy uruchamiam go z konsoli Pythona, ale nie po włożeniu do skryptu, który przekazuję --code.

Jaki jest właściwy sposób natychmiastowego wyjścia? Korzystam z QGIS 2.0.1

Aktualizacja : Próbowałem też sys.exit(). QGIS łapie go i wyświetla okno z następującymi informacjami:

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

Aktualizacja : os.kill(os.getpid(), 9)działa, ale jest to brudny hack i szukam czegoś lepszego.

Conley Owens
źródło
1
Możesz ale dlaczego?
Nathan W
1
Automatycznie tworzę pdf z kompozytorem wydruku ( --screenshotflaga po prostu go nie wycina).
Conley Owens,
Czy możesz podać swój kod do pytania, ponieważ może to pomóc potencjalnym użytkownikom odpowiadającym? Pytam o to, ponieważ użyłem również sys.exit()w moich skryptach, które działały.
Joseph
echo "sys.exit()" > code.py; qgis --code code.pyJaką wersję QGIS prowadziłeś? Jak wywoływałeś skrypty?
Conley Owens,

Odpowiedzi:

5

Wypróbuj w swoim skrypcie:

from qgis.utils import iface

#your code here

iface.actionExit().trigger()

Mi to pasuje.

Uwaga do edycji:

Oparty na komentarzu Conleya Owensa, zmieniłem nieco skrypt, aby zrobić „coś użytecznego” (w którym skomentowano wiersz importujący iface ).

#from qgis.utils import iface
import os

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

iface.actionExit().trigger()

Uruchomiłem qgis --code myscript.py w konsoli bash, w folderze skryptu i natychmiast otrzymałem ten komunikat o błędzie:

wprowadź opis zdjęcia tutaj

i wskazując, że z qgis.utils zaimportuj linię iface .

Gdy pierwszy wiersz nie jest komentowany, wykonanie skryptu nie zawierało błędów:

wprowadź opis zdjęcia tutaj

ale kontrola nie była w konsoli Pythona; znajduje się w konsoli bash (zobacz tam wydruk „Hello”). Z tego powodu twoje polecenie os.kill (os.getpid (), 9) działa, ponieważ zamknij konsolę i automatycznie zamknij QGIS.

Rozwiązaniem tego problemu, jeśli potrzebuję API PyQGIS poza QGIS, było włączenie PYTHONPATH do QGIS ( / usr / share / qgis / python ) w moim .bashrc i uruchomienie skryptu w konsoli bash jako myscript w Pythonie. py . To działa.

W systemie Windows można uzyskać PYTHONPATH w konsoli Python QGIS za pomocą:

import os
os.getcwd()

i użyj Panelu sterowania systemu Windows, aby go zmienić.

Xunilk
źródło
1
Próbowałem (jak zauważono w pierwotnym pytaniu). To nie działa Czy rzeczywiście próbowałeś tego z --codeopcji lub tylko z konsoli? Jaką wersję QGIS używasz?
Conley Owens,
Proszę zobaczyć moją „Notę do edycji”.
xunilk
1
Dzięki za pomoc, ale nie jestem pewien, co masz na myśli, uruchamiając skrypt w konsoli bash, ponieważ python myscript.pysugerujesz, żebym używał interfejsu API poza qgis, gdzie musiałbym wtedy zająć się całym nakładem pracy QgsApplication.initQgis()i ładowaniem projektu siebie? Jeśli tak, to idzie to zupełnie inną drogą.
Conley Owens,
1

Dobrze mi to robi:

import os
os._exit(0)

Przydatne jest również ustawienie kodu wyjścia.

Marioba
źródło