如果两个文件具有相同的名称,那么使用脚本中的源代码(findFile())导入它们并调用它访问last.How关联的文件中的函数以访问特定文件中的函数?
这里有一个参考
script_1.py
def runner1():
test.log("Hey")script_2.py
def runner1():
test.log("Bye")剧本:
source(findFile("scripts","script_1.py"))
source(findFile("scripts","script_2.py"))
runner1()//function callO/P:再见
注意:当我使用文件名导入时,它会将错误抛出为“模块不存在”。
发布于 2017-10-13 06:53:50
来源()将使指定文件中的“符号”(函数、变量)加载到test.py文件的命名空间/范围中。这意味着source()是解决此问题的错误工具。
(使用Orip所示的技巧,在我建议不要的第一个源()之后将函数分配给另一个符号/名称,因为其他依赖于在初始名称下可用的函数的代码最终会调用错误的函数。)
使用Python的import语句,您可以通过将文件作为Python模块来实现函数位于单独的名称空间中。为此,您必须将包含所需文件的目录路径包含到Python自己的“搜索路径”- sys.path中。
suite_mine/tst_testcase1/test.py:的含量
# -*- coding: utf-8 -*-
import os.path
import sys
# Add path to our modules to the Python search path at runtime:
sys.path.append(os.path.dirname(findFile("scripts", "file1.py")))
sys.path.append(os.path.dirname(findFile("scripts", "file2.py")))
# Now import our modules:
import file1
import file2
def main():
# Access functions in our modules:
file1.do_it()
file2.do_it()suite_mine/tst_testcase1/file1.py:的含量
# -*- coding: utf-8 -*-
import test
def do_it():
test.log("file1.py")suite_mine/tst_testcase1/file2.py的含量
# -*- coding: utf-8 -*-
import test
def do_it():
test.log("file2.py")结果日志条目:
file1.py
file2.py发布于 2017-10-09 10:21:41
当您逐一评估文件的内容时:
source()定义了一个"runner1“函数source()用一个新的"runner1“函数覆盖它。根据压榨文档,您可以使用import模块。您可能需要在scripts/目录中创建一个名为__init__.py的空文件,从而将其标记为包。
这样你就能做到
import scripts.script_1
import scripts.script_2
scripts.script_1.runner1()
scripts.script_2.runner1()或
from scripts.script_1 import runner1 as foo1
from scripts.script_2 import runner1 as foo2
foo1()
foo2()您甚至可以通过保留对第一个source()函数的新引用来继续使用runner1。不过,这太麻烦了,所以如果你能让它工作的话,你更喜欢import解决方案。
source(findFile("scripts","script_1.py"))
foo = runner1
source(findFile("scripts","script_2.py"))
foo() # runs runner1 from script_1
runner1() # runs runner1 from script_2https://stackoverflow.com/questions/46643783
复制相似问题