我有两个脚本。
Main.py
Update.py
我在 Main.py 中有一个功能,它基本上执行以下操作:
def log(message):
print(message)
os.system("echo " + message + " >> /logfile.txt")
在 Update.py 文件中,我有一个基本上进行更新的功能。但是,在整个更新功能中,它会使用此时的消息调用“log(message)”。
现在问题是,当我尝试使用 Main.py 脚本之外的函数时,我得到 NameError:全局名称“log”未定义 。
有任何帮助吗?我怎么能在任何地方使用'log'功能?
*简化代码以便解释。
修改
Main.py imports Update from /Scripts/Update.py
Update.py imports log from Main.py
当我尝试这个时,它无法说“无法导入名称更新”
答案 0 :(得分:3)
不要从log
导入Main
。这将重新运行Main.py中的代码,因为将Main.py作为脚本运行并将其作为模块导入并不等效。其他模块不应该依赖于主脚本中定义的函数。相反,将您的log
函数放在另一个模块中并导入它,或让Main.py以某种方式显式地将记录器传递给其他模块。
更新:您无法导入Update
,因为Python无法找到它。 Python在4 places中检查要导入的模块,但您应该感兴趣的是
PYTHONPATH
环境变量中指定的目录。您需要将Main.py及其导入的内容放在同一目录中,或者将/Scripts
添加到PYTHONPATH
。
答案 1 :(得分:1)
只需添加 Update.py 行
即可from Main import log
您可以从Update.py调用log()
。
答案 2 :(得分:1)
您应该导入该功能:
from Main import log
或者最好:
import Main
Main.log()
对于互相导入的模块,请参阅How can I have modules that mutually import each other。