외부에서 QGIS를위한 간단한 파이썬 스크립트를 실행하는 방법 (예 : Sublime Text)?


37

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이나 다른 뭔가 깊은 . 이 작은 코드 스 니펫은 예를 들어 활성 레이어의 이름을 인쇄해야합니다 ... 여기 내가 가진 것이 있습니다 :

    import sys
    sys.path.append("/Applications/QGIS.app/Contents/Resources/python")

    from qgis.core import *
    import qgis.utils

    print "helo" # console output: helo

    QgsApplication.setPrefixPath("/Applications/QGIS.app/", True)
    QgsApplication.initQgis()

    print QgsApplication # console output: <class 'qgis.core.QgsApplication'>

    print qgis.utils.iface # = console output: none

    aLayer = qgis.utils.iface.activeLayer()
    print aLayer.name()

    QgsApplication.exitQgis()

플러그인이나 "무거운"것을 만드는 방법에 대해서는 답장을 보내지 마십시오. QGIS의 편안한 텍스트 편집기에서 스크립트를 빠르고 쉽게 촬영할 수있는 방법을 찾고 있습니다.

답변:


32

iface이 컨텍스트에 존재하지 않기 때문에 여기 에 객체에 대한 참조를 얻을 수 없습니다 . iface( QgisInterface) 객체는 편의 플러그인에 대한 객체 또는 주요 오브젝트 등,지도 캔버스, 전설, 작곡가 예에 액세스 할 QGIS 내에서 실행되는 스크립트이며, 주요 응용 프로그램이 실행되는 경우에만 존재한다.

QGIS API를 사용하여 독립형 Python 스크립트를 작성할 때 사용자 고유의 맵핑 애플리케이션을 작성하기 때문에 이러한 항목이 존재하지 않습니다.

세 가지 상황이 있습니다.

  1. QGIS 플러그인
  2. 자동화를 위해 QGIS (플러그인 아님) 내에서 실행되는 스크립트
  3. 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되어야 작동합니다. Python 콘솔에서 스크립트를 켜고 PATH실행 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')

또는 람다를 사용하지 않고

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

람다 기반의 것을 선호합니다. 무언가를 기록하려고 할 때마다 짧고 타이핑이 적습니다.


설명과 신속한 답변에 감사드립니다! 그런 다음 옵션을 필사적으로 기다리고 있습니다 4. 그 동안 내가 함께 살고있는 2모든 시간 일을 고통 정말이다, import script다음 reload(script)과 QGIS 내 편집기에서 코스 변경은. 또한 유망한 scriptrunner 플러그인을 확인했지만 print "debug value"QGIS 콘솔에 연결할 수 없었습니다 . QGIS 콘솔에 스크립트 러너 스크립트를 인쇄하는 방법을 알고 있습니까? 많은 감사합니다! 답장을 기다린 다음 질문을 닫으십시오!
Benedikt Groß

파이썬 콘솔은 실제로 그런 종류의 출력을위한 것이 아니며 입력만을위한 것입니다. QGIS 로그 창에 로그인하면됩니다. 이것을 설명하기 위해 답변에 추가 할 것입니다.
Nathan W

감사! 매우 도움이됩니다. 내 해결 방법은 디버그 출력을 얻기 위해 팝업을 남용하는 것입니다.def info(text): QMessageBox.information(None,"Debug Info", str(text))
Benedikt Groß

오타 :QgsVector_y_Layer
Nick Volynkin

14

Nathan W의 답변이 오래되었다고 생각합니다. 다음 명령을 사용하여 명령 행 (Nathan의 옵션 4)에서 QGIS (버전 2.6) Python 스크립트를 실행할 수있었습니다.

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

이것은 작동하지만 "팁"창을 닫은 후에 만 ​​... 인터페이스를 완전히 비활성화하고 --code파이썬 스크립트를 실행하는 방법이 있습니까?
Anthony O.

5

Nathan의 옵션 4 업데이트 : (Windows, QGIS 2.18 Las Palmas)

QGIS 도움말 문서를 인쇄하려면

qgis-도움말

QGIS를 열려면 프로젝트를로드 한 다음 파이썬 스크립트를 실행하십시오.

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

이 명령은 문제없이 OSGeo4W Shell에서 실행해야합니다.


1
제 답변은 여전히 ​​QGIS 3.8 (Zanzibar)에 유효합니다.
스와치
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.