ฉันติดอยู่กับการพยายามหาวิธีเรียกใช้ sextante จาก python แบบสแตนด์อโลนจากการกระจาย OSGeo4W เหตุผลที่ฉันต้องการทำสิ่งนี้คือฉันรู้สึกเหนื่อยที่จะป้อนพารามิเตอร์ในกล่องโต้ตอบทุกครั้งที่ฉันต้องการทดสอบแบบจำลองจากตัวสร้างแบบจำลอง
ดังนั้นนี่คือสคริปต์ python เรียกมันว่า 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
ในขณะที่ฉันได้รับผลลัพธ์ที่มีความหมายจากคอนโซล Python ของ QGIS
ฉันรู้สึกเหมือนว่าฉันพลาดที่จะเริ่มต้นบางสิ่งบางอย่าง แต่อะไร?
มีวิธีที่ดีกว่าในการทดสอบแบบจำลองอื่น ๆ นอกเหนือจากการป้อนพารามิเตอร์จำนวนมากโดยใช้ GUI หรือไม่
อัพเดท 7/2/2012
ฉันกำลังมองหาวิธีแก้ปัญหาแบบ pythonic ทั่วไปเพื่อทดสอบด้วยอัลกอริทึม "mine" อัลกอริทึมดังกล่าวเป็นเพียงตัวอย่างที่แสดงให้เห็นว่าบางสิ่งบางอย่างอาจไม่ได้เริ่มต้น
อัพเดท 7/27/2012
ทางเลือกอื่นสำหรับ Script Runner คือการใช้คอนโซล IPythonเพื่อดีบักสคริปต์ นอกเหนือจากนั้นดูเหมือนว่าจะไม่มีวิธีการทดสอบหน่วยอย่างง่าย ๆ ด้วย sextante โดยไม่มีสิ่งใดที่ทำงาน :(
อัพเดท 7/30/2012
ตามที่ 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'
อืม ... มันกลายเป็นการสนทนาในรายชื่อผู้รับจดหมายเหมือนกัน บางทีการย้ายไปใช้ qgis-user หรือ qgis-developer แทนที่จะเป็น SE
iface
ด้วยสคริปต์ QGIS แบบสแตนด์อโลนiface
ใช้งานได้เฉพาะเมื่อทำงานใน QGIS ด้านข้างเท่านั้น