Suite

Impossible d'imprimer quoi que ce soit ou d'écrire quoi que ce soit dans un fichier en python après le traitement de l'importation

Impossible d'imprimer quoi que ce soit ou d'écrire quoi que ce soit dans un fichier en python après le traitement de l'importation


J'ai essayé de faire fonctionner les scripts python QGIS autonomes, mais pour une raison quelconque, après avoir importé le traitement, je ne peux rien imprimer sur la console, ni rien écrire dans un fichier. Mon objectif final est de créer une bibliothèque de scripts de traitement autonomes, il est donc important pour moi de pouvoir sortir des informations sur la console.

J'ai légèrement modifié le code de Error: algorithm not found, car la solution donnée m'a donné l'erreur "pas de module nommé traitement".

Mon code est le suivant :

#!/usr/bin/python print "1" import qgis print "2" from qgis.core import * print "3" from qgis.utils import * utils.uninstallErrorHook() print "4" app = qgis.core.QgsApplication ([], True) print "5" import processing print "6" class DummyInterface(object): def __init__(self): self.destCrs = None def __getattr__(self, *args, **kwargs): def dummy(* args, **kwargs): return DummyInterface() return dummy def __iter__(self): return self def next(self): raise StopIteration def layers(self): # simule iface.legendInterface().layers() return qgis.core .QgsMapLayerRegistry.instance().mapLayers().values() iface = DummyInterface() plugin = processing.classFactory(iface) f = open("/home/alex/output.txt", "a") a_list = traitement. alglist() pour l'élément dans a_list : f.write(str(item)) f.write(len(a_list)) f.close()

Lors de l'exécution depuis le terminal, voici ce que j'obtiens :

[email protected] : ~ $ python test.py 1 2 3 4 5 [email protected] : ~ $ cat /home/alex/output.txt cat : /home/alex/output.txt : aucun fichier ou répertoire de ce type [email protected] : ~ $

Réussi à résoudre le problème.

Tout d'abord, j'ai mal utilisé le uninstallErrorHook(). À la place de

utils.uninstallErrorHook()

j'aurais dû utiliser

uninstallErrorHook()

Ensuite, j'ai téléchargé la mauvaise version des bibliothèques de traitement. La version que j'avais était incompatible avec QGIS 2.8, mais les erreurs qu'il lançait étaient invisibles pour moi. Cela a été résolu en pointant vers le bon emplacement, qui était /usr/share/qgis/python/plugins. Trouvé cela en utilisant la console Python intégrée dans QGIS et en entrant

importer sys sys.path

et fouiner un peu dans les répertoires.

Troisièmement, il semble que Python préfère appeler les bibliothèques de traitement comme ceci :

de processing.core.Processing import Processing Processing.initialize()

En fin de compte, mon script de travail réussi qui a été modifié à partir d'une autre réponse ressemble à ceci :

#!/usr/bin/python # Préparer l'environnement import sys # Préparer le framework de traitement sys.path.append('/usr/share/qgis/python/plugins') depuis qgis.utils import * uninstallErrorHook() depuis qgis.core importer QgsApplication depuis PyQt4.QtGui importer QApplication app = QApplication([], True) QgsApplication.setPrefixPath("/usr", True) QgsApplication.initQgis() depuis processing.core.Processing importer Processing Processing.initialize() print Processing.algs # Quitter les applications QgsApplication.exitQgis() QApplication.exit()

Je ne parviens toujours pas à faire fonctionner processing.alglist(), mais la classe Processing semble tout aussi prometteuse et semble faire la même chose.