在原始脚本的不同模块中使用对象

时间:2013-04-14 13:23:14

标签: python python-2.7 arcgis

我刚开始使用Python而且我遇到了一些问题。我已经为ArcGIS编写了一些脚本并且有一些重复的东西。所以我认为将它放在我可以轻松再次使用的模块中是明智的。

现在我有两个脚本,script.pytoolbox.py。 我的脚本工作正常,所以我复制并粘贴了我需要的部分,编辑了一下,除了使用gp.Addmessage

创建的消息外,一切顺利

script.py将创建消息“Hello Stackoverflow”,但来自toolbox.py的消息不会显示。这是为什么?它加载了工具箱,因为我以后可以使用它,所以它会重新定位gp对象。

我有点被困在这里,希望能够从模块内部打印消息,以告知用户该工具发生了什么。

script.py

import os, sys, arcgisscripting

# Create the Geoprocessor object
gp = arcgisscripting.create()

gp.AddMessage("# Hello Stackoverflow")

import toolbox
toolbox.loadToolbox

toolbox.py

def loadToolbox:
    try:
      some code
      gp.AddToolbox(path)
      gp.AddMessage("# Toolbox loaded")
    except:
      gp.AddMessage("# Toolbox not found")

1 个答案:

答案 0 :(得分:0)

您的代码有两个问题:

  1. 您永远调用 loadToolBox方法,只有引用。添加()

    toolbox.loadToolbox()
    
  2. 您的loadToolbox()函数不会将gp作为参数。如果gp意味着是全局的,那么toolbox模块将无法看到它(全局变量仅在当前模块中可见)。

    添加gp作为参数,并在调用loadToolbox时将其传入。在script.py

    toolbox.loadToolbox(gp)
    

    toolbox.py

    def loadToolbox(gp):
        # rest of function