Bagaimana cara keluar dari QGIS setelah menjalankan skrip python?

10

Saya ingin menjalankan skrip python melalui qgis --code myscript.pydan kemudian segera keluar. Saya menggunakan iface.actionExit().trigger(), yang membunuh QGIS ketika saya menjalankannya dari konsol python, tetapi tidak ketika dimasukkan ke dalam skrip yang saya berikan --code.

Apa cara yang tepat untuk segera keluar? Saya menjalankan QGIS 2.0.1

Pembaruan : Saya juga sudah mencoba sys.exit(). QGIS menangkapnya dan muncul jendela dengan yang berikut ini:

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

Perbarui : os.kill(os.getpid(), 9)berfungsi tetapi ini adalah hack kotor dan saya mencari sesuatu yang lebih baik

Conley Owens
sumber
1
Anda bisa tetapi mengapa?
Nathan W
1
Saya secara otomatis membuat pdf dengan komposer cetak ( --screenshotbendera tidak memotongnya).
Conley Owens
Bisakah Anda memasukkan kode Anda ke dalam pertanyaan karena ini dapat membantu penjawab potensial? Saya menanyakan hal ini karena saya juga menggunakan sys.exit()skrip saya yang sudah berfungsi.
Joseph
echo "sys.exit()" > code.py; qgis --code code.pyQGIS versi apa yang Anda jalankan? Bagaimana Anda memohon naskah?
Conley Owens

Jawaban:

5

Coba di skrip Anda:

from qgis.utils import iface

#your code here

iface.actionExit().trigger()

Ini bekerja untuk saya.

Catatan Pengeditan:

Berbasis di Conley Owens'comment, saya sedikit mengubah skrip saya untuk melakukan "sesuatu yang berguna" (di mana baris yang mengimpor iface dikomentari).

#from qgis.utils import iface
import os

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

iface.actionExit().trigger()

Saya menjalankan qgis --code myscript.py di bash console, di dalam folder script, dan segera saya mendapat pesan kesalahan ini:

masukkan deskripsi gambar di sini

dan menunjukkan bahwa dari qgis.utils impor baris iface diperlukan.

Ketika baris pertama tidak dikomentari, eksekusi skrip tidak memiliki kesalahan:

masukkan deskripsi gambar di sini

tetapi kontrolnya tidak ada di konsol Python; itu ada di konsol bash (amati cetak "Hello" di sana). Untuk alasan ini , perintah os.kill (os.getpid (), 9) Anda berfungsi karena tutup konsol dan tutup QGIS secara otomatis.

Solusi untuk masalah ini, jika saya memerlukan API PyQGIS di luar QGIS, itu termasuk PYTHONPATH ke QGIS ( / usr / share / qgis / python ) di .bashrc saya dan menjalankan skrip di konsol bash sebagai python myscript. py . Berhasil.

Di Windows, Anda bisa mendapatkan PYTHONPATH di Konsol Python QGIS dengan:

import os
os.getcwd()

dan gunakan Control Panel Windows untuk mengubahnya.

xunilk
sumber
1
Saya sudah mencobanya (seperti disebutkan dalam pertanyaan asli). Itu tidak bekerja. Sudahkah Anda mencoba ini dari --codeopsi atau hanya dari konsol? QGIS versi apa yang Anda jalankan?
Conley Owens
Silakan, lihat "Catatan Editing" saya.
xunilk
1
Terima kasih atas bantuannya, tetapi saya tidak yakin apa yang Anda maksud dengan menjalankan skrip di bash console python myscript.py, apakah Anda menyarankan saya menggunakan api di luar qgis di mana saya kemudian harus menangani semua overhead menjalankan QgsApplication.initQgis()dan memuat proyek diri? Jika demikian, ini akan menjadi rute yang sama sekali berbeda.
Conley Owens
1

Ini bekerja dengan baik bagi saya untuk melakukan ini:

import os
os._exit(0)

Ini juga berguna bahwa Anda dapat mengatur kode keluar.

Marioba
sumber