Suite

Pourquoi QgsFeatureIterator plante-t-il dans mon script autonome ?

Pourquoi QgsFeatureIterator plante-t-il dans mon script autonome ?


J'essaie d'écrire un script autonome dans qgis 2.10 dans ubuntu. Le scénario est :

#!/usr/bin/python2.7 from qgis.core import * from platform import python_version print python_version() # chemin d'accès à l'endroit où votre qgis est installé QgsApplication.setPrefixPath("/usr", True) # charger les fournisseurs QgsApplication.initQgis () input_file = "/path/to/shape/file.shp" input_layer = QgsVectorLayer(input_file, "input layer", "ogr") QgsMapLayerRegistry.instance().addMapLayer(input_layer) print str(input_layer.featureCount()) print input_layer.dataProvider().crs().authid() pour la fonctionnalité dans input_layer.getFeatures() : passer print "bonjour" QgsApplication.exitQgis()

Lorsque je lance depuis qgis DE, j'obtiens :

2.7.6 105777 EPSG:2193 bonjour

Quand je cours depuis bash, j'obtiens :

2.7.6 105777 EPSG:2193 Défaut de segmentation (core vidé)

La seule chose que je peux deviner est mon choix d'interprète dans mon shebang mais aucun des exécutables python que je peux trouver ne fait de différence ? et compte tenu de la réponse à la fonction de version qui semble peu probable. Pour le shebang j'ai aussi essayé

#!/usr/bin/env python

avec le même résultat.

J'ai vu la documentation sur les scripts autonomes ici et j'ai trouvé le chemin correct (?) vers l'installation à partir d'ici, mais je suis perplexe quant à la cause de ce plantage.


Grâce à la promotion de Joseph, j'ai jeté un œil à la documentation de la référence de la classe d'application. Afin d'utiliser les fonctions de qgis dans votre script, vous devez ajouter un objet de référence de classe d'application qgis.

app = QgsApplication([],Faux, Aucun)

après le

QgsApplication.initQgis()

ligne et

app.exit()

À la fin.

Les documents décrivent les paramètres mais j'ai pu les remplir comme indiqué afin d'exécuter le script en tant que script shell python.

Notez également que les arguments du script que vous écrivez peuvent être transmis au script à partir du shell comme décrit ici. J'ai utilisé la réponse de wewa.

De plus, grâce à une suggestion d'Ole dans cette question SE, je peux maintenant exécuter * n'importe quel processus/script/fonction pyQGIS personnalisé en parallèle (pas seulement les fonctions disponibles dans le shell comme décrit dans ma réponse à la question SE liée ci-dessus) en utilisant ce qui précède script plus la réponse ici en tant que wrapper.

Peut-être que quelqu'un d'autre faisant la même chose ou similaire peut trouver cela utile aussi. Ma prochaine étape consiste à transmettre ces processus parallèles à un serveur (ferme) et à accélérer encore plus mes scripts personnalisés.