OSGeo4W dağıtımından bağımsız bir pythondan sextante'i çalıştırmanın yolunu bulmaya çalışıyorum. Bunu yapmak istememin nedeni Model Builder'dan her modeli test etmek istediğimde iletişim kutusuna parametre girmekten yoruldum.
İşte python betiği diyelim 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")
Toplu iş dosyamdan çağırıyorum
@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
Sorun şu ki Algorithm not found
, ben QGIS python konsolundan anlamlı çıktı alırken diyor .
Bir şeyi başlatmak için eksik olduğumu hissediyorum. Ama ne?
GUI kullanarak tonlarca parametre girmekten başka bir Modeli test etmenin daha iyi bir yolu var mı?
GÜNCELLEME 7/2/2012
Ben "mayın" algoritmaları ile test etmek için genel pythonic çözüm arıyorum. Bahsedilen algoritma sadece bir şeyin başlatılmadığını gösteren bir örnektir.
GÜNCELLEME 7/27/2012
Komut Dosyası Çalıştırıcısına bir alternatif, komut dosyalarında hata ayıklamak için IPython konsolunu kullanmaktır . Bunun dışında başka hiçbir şey olmadan sextante ile basit birim testi yapmanın bir yolu yok gibi görünüyor :(
GÜNCELLEME 7/30/2012
Victor Olaya'nın da belirttiği gibi, Sextante'ı aşağıdaki koddaki gibi başlatmaya çalışıyorum.
#!/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()
Ancak ben böyle bir şey alıyorum
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'
Şey ... hepsi bir posta listesi tartışması haline geliyor. Belki de SE yerine qgis kullanıcısına veya qgis geliştiricisine geçmeye değer.
iface
Bağımsız bir QGIS komut dosyasında erişemezsiniz .iface
yalnızca QGIS tarafında çalışırken kullanılabilir.