OSGeo4W 배포의 독립형 파이썬에서 sextante를 실행하는 방법을 찾으려고 노력하고 있습니다. 내가하고 싶은 이유는 Model Builder에서 모델을 테스트 할 때마다 대화 상자에 매개 변수를 입력하는 데 지 쳤기 때문입니다.
여기 파이썬 스크립트가 있습니다. test.py
# as per http://qgis.org/pyqgis-cookbook/intro.html#using-pyqgis-in-custom-application
from qgis.core import *
# supply path to where is your qgis installed
QgsApplication.setPrefixPath("C:/OSGeo4W/apps/qgis", True)
# load providers
QgsApplication.initQgis()
from sextante.core.Sextante import Sextante
Sextante.alglist()
Sextante.alghelp("saga:slopeaspectcurvature")
배치 파일에서 전화하고 있다는 것을
@echo off
set OSGEO4W_ROOT=C:\OSGeo4W
set PYTHONPATH=%OSGEO4W_ROOT%\apps\qgis\python;%OSGEO4W_ROOT%\apps\qgis\python\plugins;%HOME%/.qgis/python/plugins
set PATH=%OSGEO4W_ROOT%\bin;%OSGEO4W_ROOT%\apps\qgis\bin;%OSGEO4W_ROOT%\apps\qgis\plugins
python test.py
문제는 Algorithm not found
QGIS 파이썬 콘솔에서 의미있는 결과를 얻는 반면 말합니다 .
무언가를 초기화하는 것이 빠진 것 같습니다. 근데 뭐?
GUI를 사용하여 수많은 매개 변수를 입력하는 것보다 Model을 테스트하는 더 좋은 방법이 있습니까?
2012 년 7 월 2 일 업데이트
"mine"알고리즘으로 테스트 할 일반적인 파이 토닉 솔루션을 찾고 있습니다. 앞서 언급 한 알고리즘은 무언가가 초기화되지 않았 음을 보여주는 예일뿐입니다.
2012 년 7 월 27 일 업데이트
Script Runner의 대안은 IPython 콘솔 을 사용하여 스크립트 를 디버깅하는 것입니다. 그 외에는 아무것도 달리지 않고 sextante로 간단한 단위 테스트를 수행하는 방법이없는 것 같습니다.
2012 년 7 월 30 일 업데이트
Victor Olaya가 제안한 것처럼 아래 코드와 같이 Sextante를 초기화하려고합니다.
#!/usr/bin/env python
import sys
from PyQt4.QtGui import QApplication
from sextante.core.Sextante import Sextante
def main():
""" main function or something """
# as per http://qgis.org/pyqgis-cookbook/intro.html#using-pyqgis-in-custom-application
from qgis.core import *
import qgis.utils
app = QApplication(sys.argv)
# supply path to where is your qgis installed
QgsApplication.setPrefixPath("C:/OSGeo4W/apps/qgis", True)
# load providers
QgsApplication.initQgis()
# how???
# qgis.utils.iface = QgisInterface.instance()
Sextante.initialize()
run_script(qgis.utils.iface)
def run_script(iface):
""" this shall be called from Script Runner"""
Sextante.alglist()
Sextante.alghelp("saga:slopeaspectcurvature")
if __name__=="__main__":
main()
그러나 나는 다음과 같은 것을 얻는다.
Traceback (most recent call last):
File "test.py", line 29, in
main()
File "test.py", line 20, in main
Sextante.initialize()
File "C:\Documents and Settings\user\.qgis\python\plugins\sextante\core\Sextante.py", line 94, in initialize
Sextante.addProvider(GrassAlgorithmProvider())
File "C:\Documents and Settings\user\.qgis\python\plugins\sextante\grass\GrassAlgorithmProvider.py", lin
e 17, in __init__
self.actions.append(DefineGrassRegionAction())
File "C:\Documents and Settings\user\.qgis\python\plugins\sextante\grass\DefineGrassRegionAction.py", li
ne 16, in __init__
canvas = QGisLayers.iface.mapCanvas()
AttributeError: 'NoneType' object has no attribute 'mapCanvas'
글쎄 ... 모두 메일 링리스트 토론이되었다. 아마도 SE 대신 qgis-user 또는 qgis-developer로 옮겨 갈 가치가 있습니다.
iface
독립형 QGIS 스크립트 에서는 액세스 할 수 없습니다 .iface
QGIS 측면에서 실행할 때만 사용됩니다.