4 votos

QGIS 3.4 Madeira se bloquea al llamar a print()

Estoy utilizando la plantilla PyQGIS de @underdark para mostrar el accidente. Su secuencia de comandos se ejecuta como un encanto, pero tan pronto como agrego un print("finished...") - en su código, QGIS 3.4 Madeira se bloquea.

Puedes buscar su código en este sitio: Plantilla de clase @underdarks para scripts de procesamiento en python

Y en el siguiente fragmento de código se puede ver la parte en la que he añadido el botón print() -llama:

    def processAlgorithm(self, parameters, context, feedback):
    source = self.parameterAsSource(parameters, self.INPUT, context)
    (sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
                                           source.fields(), source.wkbType(), source.sourceCrs())

    features = source.getFeatures(QgsFeatureRequest())
    for feat in features:
        out_feat = QgsFeature()
        out_feat.setGeometry(feat.geometry())
        out_feat.setAttributes(feat.attributes())
        sink.addFeature(out_feat, QgsFeatureSink.FastInsert)

    print("finished ...")  # QGIS3 crashes after this line
    return {self.OUTPUT: dest_id}

El fallo se ve así (por favor, tenga en cuenta que la cadena "finished..." se ha impreso en la consola antes de que QGIS se bloqueara):

enter image description here

¿Alguna sugerencia?

6voto

Kyleigh Puntos 1

No utilice la impresión en los algoritmos de procesamiento de QGIS3. Explicación del borrador de la guía de procesamiento de QGIS:

Dar feedback a través del objeto feedback, no directamente a QgsMessageLog (y evite las sentencias print - es peligroso usarlas para algoritmos que pueden ejecutarse en un subproceso en segundo plano).

Sustituye la impresión por:

feedback.pushInfo("finished ...")

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X