Sunday, 4 February 2018

pyqgis - Getting log message from QGIS processing framework?


I run Python processing algorithms externally, and I want to get the log output I see when I run it from the QGIS 3 GUI at the log tab as shown in the screenshot:


enter image description here


I want to get the full grey log output when Result is returned only.


How do I do that?


An example follows:


import os
import sys
import gdal
gdal.UseExceptions() # Allow GDAL to throw Python Exceptions


from qgis.core import (
QgsApplication,
QgsProcessingFeedback,
QgsMessageLog)

from qgis.analysis import QgsNativeAlgorithms

QgsApplication.setPrefixPath(os.path.join("C:", os.sep, "OSGeo4W64", "apps", "qgis"), True)
qgs = QgsApplication([], False)

qgs.initQgis()

sys.path.append(os.path.join("C:", os.sep, "OSGeo4W64", "apps", "qgis", "python", "plugins"))
import processing
from processing.core.Processing import Processing

Processing.initialize()
QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms())



def pca(input_raster_list):

params = {
'input': input_raster_list,
'rescale': [0,0],
'percent': 99,
'-n': True,
'-f': False,
'output': 'C:\\Users\\...',
'GRASS_REGION_PARAMETER': None,

'GRASS_REGION_CELLSIZE_PARAMETER': 0
}
feedback = QgsProcessingFeedback()
res = processing.run("grass7:i.pca", params, feedback=feedback)
print(res)

return

Answer



You can subclass QgsProcessingFeedback to implement your own custom logging logic. E.g.


class MyFeedBack(QgsProcessingFeedback):


def setProgressText(self, text):
print(text)

def pushInfo(self, info):
print(info)

def pushCommandInfo(self, info):
print(info)


def pushDebugInfo(self, info):
print(info)

def pushConsoleInfo(self, info):
print(info)

def reportError(self, error, fatalError=False):
print(error)

This one will just print everything to the console, but you could modify the logic to write to a file, etc.



Then, whenever you call processing.run, make sure you pass an instance of your subclass as the feedback argument:


res = processing.run("grass7:i.pca", params, feedback=MyFeedBack())

No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...