Tôi bị mắc kẹt khi cố gắng tìm ra cách chạy sextante từ một con trăn độc lập từ bản phân phối OSGeo4W. Lý do tôi muốn làm điều này là vì tôi cảm thấy mệt mỏi khi nhập các tham số trong hộp thoại mỗi lần tôi muốn kiểm tra một mô hình từ Model Builder.
Vì vậy, đây là kịch bản python hãy gọi nó 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")
Đó là tôi đang gọi từ tập tin bó của tôi
@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
Vấn đề là nó nói Algorithm not found
trong khi tôi nhận được đầu ra có ý nghĩa từ bảng điều khiển python của QGIS.
Tôi cảm thấy như mình đang thiếu để khởi tạo một cái gì đó. Nhưng cái gì?
Có cách nào tốt hơn để kiểm tra Mô hình ngoài việc nhập hàng tấn tham số bằng GUI không?
CẬP NHẬT 7/2/2012
Tôi đang tìm kiếm giải pháp pythonic chung để thử nghiệm với thuật toán "của tôi". Thuật toán được đề cập chỉ là một ví dụ cho thấy rằng một cái gì đó có thể không được khởi tạo.
CẬP NHẬT 27/07/2012
Một thay thế cho Script Runner là sử dụng bảng điều khiển IPython để gỡ lỗi các tập lệnh. Ngoài ra, dường như không có cách nào để thực hiện kiểm tra đơn vị đơn giản với sextante mà không có gì khác đang chạy :(
CẬP NHẬT NGÀY 30/07/2012
Như Victor Olaya gợi ý, tôi cố gắng khởi tạo Sextante như trong đoạn mã dưới đây.
#!/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()
Tuy nhiên tôi nhận được một cái gì đó như
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'
Chà ... tất cả trở thành một cuộc thảo luận danh sách gửi thư như nhau. Có lẽ nó đáng để chuyển sang qgis-user hoặc qgis-developer thay vì SE.
iface
trong tập lệnh QGIS độc lập.iface
chỉ được sử dụng khi chạy trong QGIS bên.