运行python脚本后如何退出QGIS?


10

我想通过运行python脚本qgis --code myscript.py,然后立即退出。我正在使用iface.actionExit().trigger(),当我从python控制台运行QGIS时,它会杀死QGIS,但当放入传递给的脚本时,它不会--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)可以,但这是一个肮脏的hack,我正在寻找更好的东西。


1
您可以,但是为什么呢?
内森·W

1
我正在自动使用打印作曲器制作pdf文件(该--screenshot标记只是不能剪切它)。
康利·欧文斯

您能否将代码包含在问题中,因为这可以帮助潜在的回答者?我问这个问题,因为我也在sys.exit()我的脚本中使用过。
约瑟夫

echo "sys.exit()" > code.py; qgis --code code.py您正在运行哪个版本的QGIS?您如何调用脚本?
康利·欧文斯

Answers:


5

尝试输入脚本:

from qgis.utils import iface

#your code here

iface.actionExit().trigger()

这个对我有用。

编辑说明:

基于康利·欧文斯(Conley Owens)的评论,我略微更改了脚本以进行“有用的操作”(在其中对导入iface的行进行了注释)。

#from qgis.utils import iface
import os

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

iface.actionExit().trigger()

我在脚本文件夹内的bash控制台上运行qgis --code myscript.py,立即收到以下错误消息:

在此处输入图片说明

并指出从qgis.utils导入iface行是必需的。

当第一行未注释时,脚本执行没有错误:

在此处输入图片说明

但是控件不在Python控制台中;它在bash控制台中(请在此处观察“ Hello”打印)。因此,您的os.kill(os.getpid(),9)命令可以正常工作,因为关闭了控制台并自动关闭了QGIS。

解决此问题的方法是,如果我在QGIS之外需要PyQGIS API,那就是在我的.bashrc中包括到QGIS的PYTHONPATH(/ usr / share / qgis / python)并在bash控制台中将脚本作为python myscript运行。 py。有用。

在Windows中,您可以使用以下命令在QGIS的Python控制台中获取PYTHONPATH:

import os
os.getcwd()

并使用Windows的控制面板进行更改。


1
我确实尝试过(如原始问题中所述)。没用 您实际上是通过--code选件还是仅通过控制台尝试了此操作?您正在运行哪个版本的QGIS?
康利·欧文斯

请参阅我的“编辑说明”。
xunilk 2015年

1
感谢您的帮助,但是我不确定在bash控制台中以方式运行脚本的含义python myscript.py,是否建议我在qgis之外使用api,然后我将不得不处理运行QgsApplication.initQgis()和加载项目的所有开销我?如果是这样,这将是一条完全不同的路线。
康利·欧文斯

1

对我来说,这样做很好:

import os
os._exit(0)

设置退出代码也很有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.