2017-10-09 7 views
0

2つのファイルに同じ名前の関数がある場合は、スクリプトでsource(findFile())を使用してそれらをインポートし、last.Howで関連付けられたファイルの関数にアクセスします。特定のファイルですか?Pythonでスキッシュがサポートされていますか?Pythonを使用してSquishでファイルをインポートする

source(findFile("scripts","script_1.py")) 
source(findFile("scripts","script_2.py")) 


runner1()//function call 

O/P:バイバイ

ここ

基準

script_1.py

def runner1(): 
    test.log("Hey") 

script_2.py

def runner1(): 
    test.log("Bye") 

スクリプトであります

注:私はあなたが他の後にファイル1の内容を評価するとき、それは

+1

わかりやすく、字下げが正しく行われていますが、以前より80%以上改善されています。 – Torxed

+0

うん。まあまあです。私はエディタで同じことをしましたが、反射は異なって見えます: - | –

答えて

1

source()指定されたファイル内の「シンボル」(関数、変数は)test.pyファイルの名前空間/範囲にロードさせます。これは、source()がこの問題の間違ったツールであることを意味します。

(最初のsource()の後の別のシンボル/名前に関数を割り当てるために、最初の名前の下で利用可能な目的の関数に依存する他のコードは、間違った関数になる可能性があります。

Pythonのimport文を使用すると、ファイルをPythonモジュールとして扱うことによって、関数が別々の名前空間にあることになります。これを行うには、Python独自の "検索パス"に目的のファイルを含むディレクトリパスを含める必要があります。sys.path

suite_mine/tst_testcase1/testの内容。PY:suite_mine/tst_testcase1/file1.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/file2.py

# -*- coding: utf-8 -*- 

import test 


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

内容:結果の

# -*- coding: utf-8 -*- 

import test 


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

ログエントリ:

file1.py 
file2.py 
0

「モジュールが存在しません」などのエラーがスローされますファイル名を使用してインポートする場合:

  1. を最初source() 1「はrunner1を定義しますrunner1 『機能」新機能と
  2. source()上書きそれは』

あなたはできsquish docsによると、 210モジュール。 __init__.pyと呼ばれる空のファイルを作成して、scripts/ディレクトリをパッケージとしてマークする必要があります。

その後、あなたも最初runner1機能への新しい参照を保つことによってsource()を使用し続けることができ

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() 

を行うことができるはず。それは地獄のようにハックですが、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ファイルがなくても) 。 - >今後のR&Dでは、インタプリタがPATH変数であるpythonファイルを検索する既定のパスについて知っておく必要があります。そのため、PATH変数(__init__であっても) pyのdir)しかし、同じ問題で打たれた。 :( –

関連する問題