在python中动态导入模块时运行两次

时间:2016-11-30 11:11:32

标签: python import

我需要在python中使用curses构建一个Menu。 当用户选择选项时,它在子模块中运行一个函数。

我首先有一个包含菜单结构的json文件:

[
  {
    "name": "Action A",
    "function": "main.foo.actionA"
  },
    "name": "Action B",
    "function": "main.bar.actionB"
  }
]

我有一个主脚本调用下面的menu.load方法:

import curses
import json

class menu:
  def __init__(self):
    self.curses = curses
    self.screen = self.curses.initscr()
    self.menuItems = json.loads(<my json menu file>)

  def load(self):
     x = 0
    while x != ord('q'):
      self.screen.addstr(2, 2, "Make your choice")
      i=1
      for item in self.menuItems:
        self.screen.addstr(i, 4, item['name'])
        i+=1

      self.screen.refresh()
      x = self.screen.getch()

    if x == <my id item id matching the menu>:
      //for example
      self.run("main.bar.actionB")

   def run(self, action):
     function = action.split('.')
     // Clear the screen, remove curse stuff so I can see intercative things in the terminal

     _temp = __import__("lib.functions.%s" % function[0], globals(), locals(), [function[1]], -1)
     mod = getattr(_temp, function[1])()
     result = getattr(mod, function[2])()

     // Once run is done, get back to menu
     self.load()

这样工作正常(我没有粘贴所有代码,因为有子菜单)。 但是,当用户第一次运行第一个动作时,它可以工作。 然后,一旦用户返回菜单,他可以再次运行相同的操作,然后,我可以看到该操作运行两次。 如果我第三次运行相同的动作,它会运行三次......等等

我首先虽然导入器每次导入菜单然后找到某种参考...所以我试图添加控件:

try:
  <run the function>
except AtributeError:
  //function is not loaded, load it

但它没有用......

0 个答案:

没有答案