외부에서 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.