首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python导入Squish文件

使用python导入Squish文件
EN

Stack Overflow用户
提问于 2017-10-09 10:02:47
回答 2查看 2.8K关注 0票数 2

如果两个文件具有相同的名称,那么使用脚本中的源代码(findFile())导入它们并调用它访问last.How关联的文件中的函数以访问特定文件中的函数?

这里有一个参考

script_1.py

代码语言:javascript
复制
def runner1():
    test.log("Hey")

script_2.py

代码语言:javascript
复制
def runner1():
    test.log("Bye")

剧本:

代码语言:javascript
复制
source(findFile("scripts","script_1.py"))
source(findFile("scripts","script_2.py"))


runner1()//function call

O/P:再见

注意:当我使用文件名导入时,它会将错误抛出为“模块不存在”。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-13 06:53:50

来源()将使指定文件中的“符号”(函数、变量)加载到test.py文件的命名空间/范围中。这意味着source()是解决此问题的错误工具。

(使用Orip所示的技巧,在我建议不要的第一个源()之后将函数分配给另一个符号/名称,因为其他依赖于在初始名称下可用的函数的代码最终会调用错误的函数。)

使用Python的import语句,您可以通过将文件作为Python模块来实现函数位于单独的名称空间中。为此,您必须将包含所需文件的目录路径包含到Python自己的“搜索路径”- sys.path中。

suite_mine/tst_testcase1/test.py:的含量

代码语言:javascript
复制
# -*- 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:含量

代码语言:javascript
复制
# -*- coding: utf-8 -*-

import test


def do_it():
    test.log("file1.py")

suite_mine/tst_testcase1/file2.py含量

代码语言:javascript
复制
# -*- coding: utf-8 -*-

import test


def do_it():
    test.log("file2.py")

结果日志条目:

代码语言:javascript
复制
file1.py
file2.py
票数 2
EN

Stack Overflow用户

发布于 2017-10-09 10:21:41

当您逐一评估文件的内容时:

  1. 第一个source()定义了一个"runner1“函数
  2. 第二个source()用一个新的"runner1“函数覆盖它。

根据压榨文档,您可以使用import模块。您可能需要在scripts/目录中创建一个名为__init__.py的空文件,从而将其标记为包。

这样你就能做到

代码语言:javascript
复制
import scripts.script_1
import scripts.script_2
scripts.script_1.runner1()
scripts.script_2.runner1()

代码语言:javascript
复制
from scripts.script_1 import runner1 as foo1
from scripts.script_2 import runner1 as foo2
foo1()
foo2()

您甚至可以通过保留对第一个source()函数的新引用来继续使用runner1。不过,这太麻烦了,所以如果你能让它工作的话,你更喜欢import解决方案。

代码语言:javascript
复制
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_2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46643783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档