1 votos

¿Utilizar el bucle for para imprimir los últimos mensajes de varios procesos?

¿Hay alguna manera de utilizar un bucle "for" para imprimir los mensajes de éxito de todos los geoprocesos siguientes? En este ejemplo, estoy recortando todo el sistema fluvial de Kansas a una ecorregión preseleccionada, y luego calculando el total de millas de ríos dentro de esa ecorregión.

Puedes ver que he utilizado la función "print" para mostrar un mensaje personalizado completado después de que cada geoproceso tenga éxito, pero eso puede ser mucho trabajo; creo que un bucle "for" funcionaría mejor.

Notarás que he utilizado el arcpy.GetMessageCount() para imprimir el último mensaje, pero sólo imprime el último mensaje del último elemento de geoprocesamiento (creo)

Aquí está el código de lo que he probado. Una vez más, me gustaría deshacerse de la print debajo de cada paso de geoprocesamiento:

import arcpy, sys
from arcpy import env
env.workspace = "C://whatever_workspace"
env.overwriteOutput = True

inFc = "ks_ecoregions.shp"
clipFc = "ks_major_rivers.shp"
outTable = "out_table"

#Processes
try:
    #Check out extension
    arcpy.CheckOutExtension("Spatial")
    print "Extension checked out\n"

    #Make feature layer
    arcpy.MakeFeatureLayer_management(inFc, "ks_ecoregions_layer")
    print "Feature Layer Made\n"

    #Select ecoregion
    arcpy.Select_analysis("ks_ecoregions_layer", "ks_ecoregions_select", where_clause = "US_L3NAME = 'Flint Hills'")
    print "Region selected\n"

    #Perform buffer around the selected ecoregion
    arcpy.Buffer_analysis("ks_ecoregions_select", "buffer_layer", "10 Kilometers")
    print "Buffer created\n"

    #Clip rivers to region
    arcpy.Clip_analysis(clipFc, "ks_ecoregions_select", "riverClip")
    print "Clip created\n"

    #Add table to attributes, converting "kilometers" to "miles
    arcpy.AddGeometryAttributes_management("riverClip", "LENGTH", "MILES_US")
    print "Table added\n"

    #Get summary of total miles of rivers in selected region
    arcpy.Statistics_analysis("riverclip", outTable, [["LENGTH", "SUM"]])
    print "Summation computed\n"

    #Delete intermediate data
    arcpy.Delete_management("ks_ecoregions_layer")
    print "Intermediate feature class deleted\n"
    arcpy.Delete_management("ks_ecoregions_select")
    print "Intermediate feature class deleted\n"
    arcpy.Delete_management("buffer_layer")
    print "Intermediate feature class deleted\n"

    #Get projection of original dataset
    desc = arcpy.Describe("riverClip")
    print "Data information for original projection: \nName: {0} \nData Type: {1} \nProjection: {2}\n".format(desc.name, desc.datasetType, desc.spatialReference.name)

   #Check extension back in
    arcpy.CheckInExtension("Spatial")
    print "Extension checked back in"
except arcpy.ExecuteError:
    pass

severity = arcpy.GetMaxSeverity()

if severity == 2:
    print "Error occurred: \n{0}".format(arcpy.GetMessages(2))
elif severity == 1:
    print "Warning raised: \n{1}".format(arcpy.GetMessages(1))
else:
    count = arcpy.GetMessageCount()
    print arcpy.GetMessage(count-1)

3voto

Lucas Puntos 128

Puede utilizar Result.GetMessage/GetMessages en lugar de arcpy.GetMessage/GetMessages

Por ejemplo:

import arcpy

def log(result):
        # Last message
        print(result.getMessage(result.messageCount-1))

        # Or all messages...
        # print(result.getMessages())

log(arcpy.SomeTool_toolbox(some_input))
log(arcpy.AnotherTool_toolbox(some_input))
log(arcpy.DifferentTool_toolbox(some_input))

O:

import arcpy

results = []

results.append(arcpy.SomeTool_toolbox(some_input))
results.append(arcpy.AnotherTool_toolbox(some_input))
results.append(arcpy.DifferentTool_toolbox(some_input))

for result in results:
    print(result.getMessage(result.messageCount-1))

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