2017-10-09 17 views
0

Wenn zwei Dateien mit demselben Namen funktionieren, importieren Sie sie mit der Quelle (findFile()) in einem Skript und rufen sie auf die Funktion in der zuletzt zugeordneten Datei auf eine bestimmte Datei? Zieht Squish mit Python Unterstützung Importdatei Syntax? HierImportieren von Datei in Squish mit Python

ist eine Referenz

script_1.py

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

script_2.py

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

Script:

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


runner1()//function call 

O/P: Bye

Hinweis: Wenn ich Dateinamen importieren Verwendung wirft es Fehler als „Modul präsentieren nicht“

+1

Nicht sicher, ich habe die Einrückung richtig, aber mindestens 80% besser als zuvor. – Torxed

+0

Yup.All fein.Ich habe das gleiche im Editor aber die Reflexion scheint anders: - | –

Antwort

1

source() bewirkt, dass die „Symbole“ (Funktionen, Variablen) in der angegebenen Datei in den Namensraum/Umfang der test.py-Datei geladen werden. Dies bedeutet, dass source() das falsche Werkzeug für dieses Problem ist.

(Mit dem von Orip gezeigten Trick, um die Funktion einem anderen Symbol/Namen nach der ersten Quelle zuzuweisen() würde ich davon abraten, da anderer Code, der auf der gewünschten Funktion unter dem ursprünglichen Namen verfügbar sein würde, aufrufen würde Falsche Funktion eventuell.)

Mit Pythons Import-Anweisung können Sie erreichen, dass die Funktionen in separaten Namespaces liegen, indem Sie die Dateien als Python-Module behandeln. Damit dies funktioniert, müssen Sie die Verzeichnispfade mit den gewünschten Dateien in Pythons eigenen "Suchpfad" einfügen: sys.path:

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

Inhalt suite_mine/tst_testcase1/file1.py:

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

import test 


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

Inhalt suite_mine/tst_testcase1/file2.py:

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

import test 


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

Resultierende Protokolleinträge:

file1.py 
file2.py 
0

Wenn Sie den Inhalt der Datei nacheinander bewerten:

  1. Die erste source() definiert man einen „Runner1 "Funktion
  2. die zweite source() überschreibt es mit einem neuen‚Runner1‘-Funktion

nach der squish docs können Sie import Module. Es ist möglich, dass Sie das Verzeichnis scripts/ als Paket markieren müssen, indem Sie eine leere Datei mit dem Namen __init__.py erstellen.

Sie sollten dann in der Lage sein

import scripts.script_1 
import scripts.script_2 
scripts.script_1.runner1() 
scripts.script_2.runner1() 

oder

from scripts.script_1 import runner1 foo1 
from scripts.script_2 import runner1 as foo2 
foo1() 
foo2() 

Sie selbst, indem sie einen neuen Verweis auf die erste runner1 Funktion source() halten zu tun. Es ist hacky wie die Hölle, obwohl, so bevorzugen Sie die import Lösung, wenn Sie es zum Funktionieren bringen können.

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

Ich habe versucht und beobachtet die folgenden -> Der Interpreter versucht, nach der Datei unter dem Verzeichnis suchen, wo die aktuelle Skriptdatei platziert ist.Und wenn ich die Datei unter diesem Pfad platzieren, funktioniert es gut (auch ohne __init__.py Datei) . -> Bei weiteren F & E habe ich die Standardpfade kennengelernt, in denen der Interpreter nach der Python-Datei sucht, eine davon ist die PATH-Variable und so habe ich das aktuelle Verzeichnis, in dem sich die Datei befindet, zur PATH-Variablen hinzugefügt (sogar mit __init__). py in the dir), wurde aber mit dem gleichen Problem konfrontiert. :( –

Verwandte Themen