Как выйти из 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
Можно но почему?
Натан 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 (наблюдайте печать "Hello" там). По этой причине ваша команда os.kill (os.getpid (), 9) работает, потому что закрывает консоль и автоматически закрывает QGIS.

Решением этой проблемы, если мне нужен API PyQGIS вне QGIS, было включение PYTHONPATH в QGIS ( / usr / share / qgis / python ) в мой .bashrc и запуск сценария в консоли bash в виде сценария Python. ру . Оно работает.

В Windows вы можете получить PYTHONPATH в консоли Python QGIS с помощью:

import os
os.getcwd()

и используйте панель управления Windows, чтобы изменить его.

xunilk
источник
1
Я попробовал это (как отмечено в оригинальном вопросе). Не работает Вы на самом деле пробовали это с --codeопцией или только с консоли? Какую версию QGIS вы используете?
Конли Оуэнс
Пожалуйста, смотрите мою "Редактирование заметки".
xunilk
1
Спасибо за помощь, но я не уверен, что вы подразумеваете под запуском скрипта в консоли bash python myscript.py, так как вы предлагаете использовать API вне qgis, где мне пришлось бы тогда справляться со всеми накладными расходами при запуске QgsApplication.initQgis()и загрузке проекта? себя? Если так, то это будет совершенно другой путь.
Конли Оуэнс
1

Для меня это хорошо работает:

import os
os._exit(0)

Также полезно, что вы можете установить код выхода.

Marioba
источник