Скрипт Arcmap не будет печатать сообщения в консоли Arcmap - PullRequest
0 голосов
/ 30 октября 2019

У меня есть скрипт Python для Arcmap, который я написал. Я пытаюсь создать инструмент, который перепроектирует все классы пространственных объектов в рабочей области в указанный класс пространственных объектов.

Проблема, с которой я столкнулся, заключается в том, что я не могу заставить Arcmap напечатать «завершенные» сообщения. Сообщения, которые я хочу видеть, будут печататься, когда я жестко закодирую переменные и запускаю их как скрипт, но они не будут печататься в Arcmap. В приведенном ниже коде видно, что у меня есть определенные печатные сообщения, которые я хочу напечатать, но они просто не будут отображаться.

Код:

#Import modules
import arcpy, os

#Set workspace directory
from arcpy import env

#Define workspace
inWorkspace = arcpy.GetParameterAsText(0)
env.workspace = inWorkspace
env.overwriteOutput = True

try:
    #Define local feature class to reproject to:
    targetFeature = arcpy.GetParameterAsText(1)

    #Describe the input feature class
    inFc = arcpy.Describe(targetFeature)
    sRef = inFc.spatialReference

    #Describe input feature class
    fcList = arcpy.ListFeatureClasses()

    #Loop to re-define the feature classes and print the messages:
    for fc in fcList:
        desc = arcpy.Describe(fc)
        if desc.spatialReference.name != sRef.name:
            print "Projection of " + str(fc) + " is " + desc.spatialReference.name + ", so re-defining projection now:\n"
            newFc = arcpy.Project_management(fc, "projected_" + fc, sRef)
            newFeat = arcpy.Describe(newFc)
            count = arcpy.GetMessageCount()
            print "The reprojection of " + str(newFeat.baseName) + " " + arcpy.GetMessage(count-1) + "\n"

    #Find out which feature classes have been reprojected
    outFc = arcpy.ListFeatureClasses("projected_*")

    #Print a custom messagae describing which feature classes were reprojected
    for fc in outFc:
        desc = arcpy.Describe(fc)
        name = desc.name
        name = name[:name.find(".")]
    name = name.split("_")
    name = name[1] + "_" + name[0]
    print "The new file that has been reprojected is named " + name + "\n"

except arcpy.ExecuteError:
    pass

severity = arcpy.GetMaxSeverity()

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

Когда я загружаю скрипт вПанель инструментов Arcmap, следующие строки (из вышеприведенного кода) НЕ будут печататься:

print "Projection of " + str(fc) + " is " + desc.spatialReference.name + ", so re-defining projection now:\n"

print "The reprojection of " + str(newFeat.baseName) + " " + arcpy.GetMessage(count-1) + "\n"

print "The new file that has been reprojected is named " + name + "\n"

Какя могу это исправить?

1 Ответ

1 голос
/ 03 ноября 2019

print печатает сообщения только во время работы вашего скрипта в интерпретаторе Python. Чтобы распечатать журналы во время работы скрипта в ArcGIS Toolbox, вам нужно использовать arcpy.AddMessage()

arcpy.AddMessage("Projection of {0} is {1}, so re-defining projection now: ".format(str(fc), desc.spatialReference.name)

...