调用不同模块python中的函数

时间:2017-04-23 14:35:31

标签: python python-2.7

我正在编写许多小python脚本并保存在一个目录中,我用不同的脚本调用它们

下面是脚本,它正在调用已保存在另一个导演acc_repo中的函数:

from acc_repo import col
import logging
import getpass
col.col()
dc = raw_input(OKGREEN + "Choose DataCenter:" + ENDC)
    File "ucs_qa.py", line 21, in <module>
    dc = raw_input(OKGREEN + "Choose DataCenter:" + ENDC)
NameError: name 'OKGREEN' is not defined

保存在acc_repo目录中的功能

def col ():
    global HEADER
    global OKBLUE
    global OKGREEN
    global WARNING
    global FAIL
    global ENDC
    global BOLD
    global UNDERLINE
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'

如何修复错误?在处理许多小python脚本方面,我是在正确的轨道上吗?请提供建议并帮助解决问题

4 个答案:

答案 0 :(得分:0)

尝试

col.OKGREEN

就像函数一样,不同文件中的变量需要知道它们所在的位置。这允许开发人员创建相同的命名变量,而不会打扰他们导入的库。

答案 1 :(得分:0)

您的函数col.col()声明了全局变量,但它们仍然在声明它们的模块的范围内。因此,在调用col.col()之后,您可以通过使用col模块限定名称来访问声明的变量。例如,您可以使用OKGREEN

访问col.OKGREEN

答案 2 :(得分:0)

(更新答案) 试试这个:

from acc_repo import col
import logging
import getpass

col.col()

# import the OKGREEN.. etc after col()
from acc_repo.col import * 

dc = raw_input(OKGREEN + "Choose DataCenter:" + ENDC)

调用col()后,全局变量初始化。

但这更像是一种快速的解决方法,可以使您的代码正常工作。我猜你试图通过调用col()使main.py中的全局变量“全局”,但它们实际上只是col.py范围内的全局变量。因此,在from acc_repo.col import *被调用后仍然需要col()

要实现您的目标,请将col.py修改为(如@ Maurice的回答):

HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'

然后删除行col.col(),并保持另一个原样。

答案 3 :(得分:0)

根本不要使用全局变量!

acc_repo.py:

HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'

main.py:

from acc_repo import *
import logging
import getpass

dc = raw_input(OKGREEN + "Choose DataCenter:" + ENDC)
print(dc)