同时在两个Python脚本之间导入函数

2024-09-28 23:35:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试运行一个聊天机器人,它可以在程序运行时创建新命令。为此,我将所有命令保存在第二个python脚本中,并使用主脚本编辑命令.py文件,而聊天机器人仍在运行。你知道吗

问题…

我可以让两个脚本使用import main和import main访问彼此main.function名称()调用函数。但是,当我尝试调用命令.py从主.py,然后使用调用的函数调用中的另一个函数主.py我听到一个错误说

AttributeError: module 'main' has no attribute 'exampleFunction' 

例如以下代码

测试.py

import TESTING2

def runme(inp):
    print(inp)
    startOver()

print("begin")
TESTING2.startOver()

测试2.py

import TESTING

def startOver():
    userInput = input("Enter text at your own risk... ")
    TESTING.runme(userInput)

产生以下结果:

begin
Traceback (most recent call last):
  File "C:\Users\harry\Desktop\TESTING.py", line 1, in <module>
    import TESTING2
  File "C:\Users\harry\Desktop\TESTING2.py", line 1, in <module>
    import TESTING
  File "C:\Users\harry\Desktop\TESTING.py", line 8, in <module>
    TESTING2.startOver()
AttributeError: module 'TESTING2' has no attribute 'startOver'

预期的结果将是一个连续的输入循环,然后像一个无缝的脚本一样打印文本。你知道吗

这可能吗?如果是这样的话,我该怎么做?或者有更好的方法来实现同样的目标吗?你知道吗

非常感谢。你知道吗


Tags: inpyimport命令脚本mainlinetesting
1条回答
网友
1楼 · 发布于 2024-09-28 23:35:26

所以,我会给你一些可以解决你问题的东西。实际上,您所做的是构造一个循环依赖:commands.pymain.py编写,main.py依赖于commands.py的函数。几乎可以肯定的是,有一种方法可以解决您的问题,而不引入这种循环依赖,但我需要知道更多,以便提出一些建议。你知道吗

如果确定要这样做,可以使用importlib.reload,它告诉python重新加载已经导入的模块。换句话说,如果您在调用原始的import之后向commands.py添加了一个新函数,那么调用reload将使此函数可用。你知道吗

作为一个小示例,请尝试设置commands.pymain.py脚本,如下所示:

#commands.py
def func1():
    print(1)

以及:

#main.py
import commands
commands.func1()

input("hit enter once you've edited commands.py")

from importlib import reload
commands = reload(commands)
commands.func2()

运行main.py,当您到达input部分时,打开commands.py,并将其更改为如下所示:

#commands.py
def func1():
    print(1)

def func2():
    print(2)

现在在运行main.py脚本中点击“回车”。您应该看到打印到终端的func2结果。你知道吗

不过,也要注意reload并不一定会按照您预期的方式行事,而且可能会导致一些奇怪的、可以解释的事情发生。有关更多信息,请参阅以下帖子:https://stackoverflow.com/a/438845/141789

相关问题 更多 >