2017-10-09 90 views
0

如果兩個文件具有相同名稱的函數,請在腳本中使用source(findFile())將其導入並調用它,以訪問最後關聯的文件中的函數。如何訪問函數一個特定的文件?用python支持導入文件語法壓扁嗎?使用python在Squish中導入文件

這裏是一個參考

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 call 

O/P:再見

注:當我導入使用的文件名,它拋出的錯誤是「模塊不存在」

+1

不確定我得到了縮進權,但比以前好了至少80%。 – Torxed

+0

Yup.All fine.I在編輯器中做了同樣的事情,但反射看起來不同: - | –

回答

1

source()導致指定文件中的「符號」(函數,變量)被加載到test.py文件的命名空間/作用域中。這意味着source()是這個問題的錯誤工具。 (使用Orip顯示的技巧,將函數分配給第一個source()之後的另一個符號/名稱,因爲其他代碼依賴於所需函數在初始名稱下可用,所以會調用錯誤的函數)

使用Python的導入語句,可以通過將文件視爲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 
0

當你評價文件的內容之一後,其他:

  1. source()一個定義了一個「runner1 「功能
  2. 第二source()覆蓋它與一個新的‘runner1’功能

按照squish docs可以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 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_2 
+1

我試過並觀察以下內容 - >解釋器嘗試在當前腳本文件所在的目錄下查找文件。如果將該文件放在此路徑下,它可以正常工作(即使沒有__init__.py文件) 。 - >在進一步的研發中,我瞭解瞭解釋器將搜索python文件的默認路徑,其中一個是PATH變量,因此我將當前目錄所在的文件所在的目錄添加到PATH變量(即使使用了__init__。 py在dir中)但是被同樣的問題觸發了。 :( –