Як вийти з QGIS після запуску сценарію python?


10

Я хотів би запустити скрипт python через, qgis --code myscript.pyа потім негайно вийти. Я використовую iface.actionExit().trigger(), що вбиває QGIS, коли я запускаю його з консолі python, але не тоді, коли вводиться в сценарій, який я передаю --code.

Який правильний спосіб негайно вийти? Я використовую QGIS 2.0.1

Оновлення : Я також спробував sys.exit(). QGIS ловить його і спливає вікно із наступним:

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

Оновлення : os.kill(os.getpid(), 9)працює, але це брудний злом, і я шукаю щось краще.


1
Ви можете, але чому?
Nathan W

1
Я автоматично створюю PDF із композитором для друку ( --screenshotпрапор просто не вирізає).
Конлі Оуенс

Чи можете ви включити свій код у запитання, будь ласка, оскільки це може допомогти потенційним відповідачам? Я запитую це, як я також використовував sys.exit()свої сценарії, які працювали.
Йосиф

echo "sys.exit()" > code.py; qgis --code code.pyЯку версію QGIS ви працювали? Як ви викликали сценарії?
Конлі Оуенс

Відповіді:


5

Спробуйте в своєму сценарії:

from qgis.utils import iface

#your code here

iface.actionExit().trigger()

Це працює для мене.

Примітка щодо редагування:

Базуючись на коментарі Конлі Оуенса, я трохи змінив свій сценарій, щоб зробити "щось корисне" (де рядок, який імпортує iface, коментувався).

#from qgis.utils import iface
import os

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

iface.actionExit().trigger()

Я запустив qgis --code myscript.py на консолі bash, всередині папки сценарію, і одразу отримав це повідомлення про помилку:

введіть тут опис зображення

і вказуючи, що з qgis.utils імпортується iface необхідна лінія.

Коли перший рядок не коментується, у виконанні сценарію не було помилок:

введіть тут опис зображення

але керування не було в консолі Python; він знаходиться в консолі bash (дотримуйтесь друку "Привіт" там). З цієї причини ваша команда os.kill (os.getpid (), 9) працює, оскільки закриває консоль і автоматично закриває QGIS.

Вирішення цієї проблеми, якщо мені потрібен API PyQGIS поза QGIS, полягало в тому, щоб включити PYTHONPATH до QGIS ( / usr / share / qgis / python ) у мій .bashrc та запустити скрипт на консолі bash як python myscript. пі . Це працює.

У Windows ви можете отримати PYTHONPATH на консолі Python QGIS за допомогою:

import os
os.getcwd()

і використовуйте Панель управління Windows, щоб змінити його.


1
Я спробував це (як зазначено в оригінальному запитанні). Це не працює. Ви насправді пробували це з --codeопції чи лише з консолі? Яку версію QGIS ви використовуєте?
Конлі Оуенс

Будь ласка, дивіться мою "Примітку про редагування".
xunilk

1
Дякую за допомогу, але я не впевнений, що ви маєте на увазі під керуванням скрипту на консолі bash python myscript.py, чи ви пропонуєте ви використовувати api поза qgis, де мені потім доведеться обробляти всі накладні витрати QgsApplication.initQgis()та завантаження проекту себе? Якщо так, то це йде зовсім інший маршрут.
Конлі Оуенс

1

Для мене це добре працює:

import os
os._exit(0)

Також корисно, що ви можете встановити вихідний код.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.