Làm cách nào để thoát QGIS sau khi chạy tập lệnh python?


10

Tôi muốn chạy một kịch bản python qua qgis --code myscript.pyvà sau đó thoát ngay lập tức. Tôi đang sử dụng iface.actionExit().trigger(), nó sẽ giết chết QGIS khi tôi chạy nó từ bảng điều khiển python, nhưng không phải khi đưa vào tập lệnh mà tôi chuyển đến --code.

Cách đúng đắn để thoát ngay lập tức là gì? Tôi đang chạy QGIS 2.0.1

Cập nhật : Tôi cũng đã thử sys.exit(). QGIS bắt nó và bật lên một cửa sổ với thông tin sau:

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

Cập nhật : os.kill(os.getpid(), 9)hoạt động nhưng đó là một bản hack bẩn và tôi đang tìm kiếm thứ gì đó tốt hơn.


1
Bạn có thể nhưng tại sao?
Nathan W

1
Tôi đang tự động tạo một bản pdf với một trình soạn thảo in ( --screenshotcờ không cắt nó).
Conley Owens

Bạn có thể bao gồm mã của bạn vào câu hỏi vì điều này có thể giúp người trả lời tiềm năng? Tôi hỏi điều này vì tôi cũng đã sử dụng sys.exit()trong các kịch bản của mình đã hoạt động.
Joseph

echo "sys.exit()" > code.py; qgis --code code.pyPhiên bản nào của QGIS bạn đang chạy? Làm thế nào bạn đã gọi các kịch bản?
Conley Owens

Câu trả lời:


5

Hãy thử trong kịch bản của bạn:

from qgis.utils import iface

#your code here

iface.actionExit().trigger()

Nó làm việc cho tôi.

Chỉnh sửa ghi chú:

Dựa trên Conley Owens'comment, tôi đã thay đổi một chút kịch bản của mình để làm "một cái gì đó hữu ích" (trong đó dòng nhập iface đã được nhận xét).

#from qgis.utils import iface
import os

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

iface.actionExit().trigger()

Tôi đã chạy qgis --code myscript.py tại bảng điều khiển bash, bên trong thư mục của tập lệnh và ngay lập tức tôi nhận được thông báo lỗi này:

nhập mô tả hình ảnh ở đây

và chỉ ra rằng từ dòng nhập khẩu qgis.utils là cần thiết.

Khi dòng đầu tiên không được nhận xét, việc thực thi tập lệnh không có lỗi:

nhập mô tả hình ảnh ở đây

nhưng điều khiển không có trong bảng điều khiển Python; nó nằm trong bảng điều khiển bash (quan sát bản in "Hello" ở đó). Vì lý do này, lệnh os.kill (os.getpid (), 9) của bạn hoạt động vì đóng bàn điều khiển và tự động đóng QGIS.

Giải pháp cho vấn đề này, nếu tôi cần API PyQGIS bên ngoài QGIS, thì đó là đưa PYTHONPATH sang QGIS ( / usr / share / qgis / python ) trong .bashrc của tôi và để chạy tập lệnh trong bảng điều khiển bash dưới dạng python. py . Nó hoạt động.

Trong Windows, bạn có thể lấy PYTHONPATH trong Bảng điều khiển Python của QGIS với:

import os
os.getcwd()

và sử dụng Bảng điều khiển của Windows để thay đổi nó.


1
Tôi đã thử nó (như đã lưu ý trong câu hỏi ban đầu). Nó không hoạt động. Bạn đã thực sự thử điều này từ --codetùy chọn hay chỉ từ bảng điều khiển? Phiên bản nào của QGIS bạn đang chạy?
Conley Owens

Xin vui lòng, xem "Ghi chú chỉnh sửa" của tôi.
xunilk

1
Cảm ơn sự giúp đỡ, nhưng tôi không chắc ý của bạn là gì khi chạy tập lệnh trong bảng điều khiển bash python myscript.py, vì bạn có gợi ý tôi sử dụng api bên ngoài qgis hay không, nơi tôi sẽ phải xử lý tất cả chi phí chạy QgsApplication.initQgis()và tải dự án riêng tôi? Nếu vậy, đây là một tuyến đường hoàn toàn khác.
Conley Owens

1

Nó hoạt động tốt cho tôi để làm điều này:

import os
os._exit(0)

Nó cũng hữu ích khi bạn có thể đặt mã thoát.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.