我想从QGIS的“外部”为QGIS(Mac)运行一些小型而简单的python脚本。在这种情况下,外部是指普通的os命令行(terminal.app)甚至更好,直接从Sublime Text(文本编辑器)中退出,但绝对不是通过内置的QGIS python控制台。

我已经阅读了各种教程,例如http://www.qgis.org/pyqgis-cookbook/intro.html#python-applications,我能够获得对QGIS应用程序的引用,但不幸的是,没有对qgis.utils.iface或其他更深层次的内容的引用。例如,这个小代码段应打印出活动层的名称...这就是我所拥有的内容:

创建一个插件或其他“沉重”的东西。我只是在寻找一种快速便捷的方法,将脚本从舒适的文本编辑器拍摄到QGIS。

#1 楼

您无法在此处获得对iface对象的引用,因为它在此上下文中不存在。 ifaceQgisInterface)对象是用于在QGIS内部运行的插件或脚本访问主要对象的便捷对象,例如地图画布,图例,作曲家等,并且仅在主应用程序运行时存在。

当您使用QGIS API创建独立的Python脚本时,这些东西都不存在,因为您是在制作自己的东西映射应用程序。

有三种不同的情况:


QGIS插件
在QGIS(不是插件)中运行以实现自动化的脚本
使用QGIS API的独立应用程序

1.2.可以访问iface,而最后一个没有访问权限。

对于3,如果要创建一个打开的脚本在地图画布中的一个图层上,您可以在QgsApplication.initQgis()之后执行

map = QgsMapCanavs()
layer = QgsVectoryLayer('path.shp','myshapefile','ogr')
map.setLayerSet([layer])


但是,如果您确实要查找类似2的东西,则可以在脚本编辑器中编写

from qgis.core import *
from qgis.gui import *
import qgis.utils

qgis.utils.iface.activeLayer()


,但这必须在QGIS中运行才能使qgis.utils正常工作。可以通过将脚本放在PATH上并在Python控制台中运行import scriptname或使用ScriptRunner插件来完成。

请注意,以下内容还不是QGIS

有一个尚未添加的数字4,希望将来会出现,并且可以使用命令行arg来运行QGIS,以说运行此代码。

例如:

qgis --code=mycodefile.py


插件日志记录(1.8版)

您可以使用QgsMessageLog类将信息记录到QGIS日志窗口。右下角的黄色感叹号。

from qgis.core import *
log = lambda m: QgsMessageLog.logMessage(m,'My Plugin') 
log('My message')


或不使用lambda

QgsMessageLog.logMessage('My message', 'My Plugin')


我更喜欢基于lambda的代码,因为它更短且您每次想记录某些内容时都更少键入。

评论


感谢您的澄清和迅速的答复!然后我拼命地等待着选项4。与此同时,我不得不忍受着2的困扰,这一直很麻烦,因为我一直在执行导入脚本,然后执行reload(script),当然也要从编辑器更改为QGIS。我还检查了scriptrunner插件,该插件很有希望,但是后来我无法在QGIS控制台上获得任何打印“调试值”。您是否知道如何让scriptrunner脚本将某些内容打印到QGIS控制台?非常感谢!将等待您的答复,然后关闭问题!

– BenediktGroß
2012年7月16日17:06



python控制台并不是真正意义上的那种输出,而是更多地用于输入。您可以做的就是登录到QGIS日志窗口。将添加到答案中对此进行解释。

–内森·W
2012年7月17日在2:06

谢谢!这非常有帮助。我的解决方法是滥用弹出窗口以获取调试输出def info(text):QMessageBox.information(None,“ Debug Info”,str(text))

– BenediktGroß
2012年7月17日在12:48

错字:QgsVector_y_Layer

–尼克·沃伦金(Nick Volynkin)
16-10-7在7:16

#2 楼

我认为Nathan W的答案已经过时。我能够使用以下命令从命令行(Nathan的选项4)运行QGIS(2.6版)python脚本。

man qgis
qgis -nologo --project /path/foo.qgs --code /path/foo.py


评论


这是有效的,但是只有在我关闭“提示”窗口之后……是否可以完全禁用该接口并仅执行--code python脚本?

– Anthony O.
18年7月10日在13:17

#3 楼

弥敦道选项4的更新:(Windows,QGIS 2.18 Las Palmas)

要打印QGIS帮助文档,


qgis --help

/>
要打开QGIS,请先加载一个项目,然后运行python脚本。


qgis --nologo --project c:/path/to/projfile.qgs --code c:/path/to/code.py


这些命令应该可以在OSGeo4W Shell上正常运行。

评论


我的答案对于QGIS 3.8(Zanzibar)仍然有效。

–swatchai
19-10-8的15:39