2017-07-11 4 views
0

Angenommen, führen Sie eine Verzeichnisstruktur wie folgt mit:Python-Skript mit relativen Pfaden nicht innerhalb von Funktionen

src\ 
    foo1.py 
    Dir\ 
     foo2.py 

Wenn ich den folgenden Code in foo1.py verwenden, ich habe kein Problem beim Laufen:

import os 
os.chdir("Dir") 
exec(open("./foo2.py").read()) 
os.chdir("..") 

Aber wenn ich änderte es dazu:

import os 
def test(): 
    os.chdir("Dir") 
    exec(open("./foo2.py").read()) 
    os.chdir("..") 

test() 

Fehler accurs:

Traceback (most recent call last): 
    File "foo1.py", line 8, in <module> 
    test() 
    File "foo1.py", line 5, in test 
    exec(open("./foo2.py").read()) 
    File "<string>", line 134, in <module> 
NameError: name 'resistorLength' is not defined 

Alles was ich vermisse?

Vielen Dank.

+0

Könnte helfen zu wissen, was in 'foo2.py' ist. Könnte helfen, zu wissen, was Sie von 'open (" ./ foo2.py "). Read()' zurückgegeben bekommen. –

+0

Wenn beide Python-Skripte sind, warum sollten sie über 'exec' laufen? Sie können einfach einen einfachen Import durchführen und die gewünschten Funktionen ausführen (siehe https://stackoverflow.com/questions/1186789/what-is-the-best-way-to-call-a-python-script- from-another-python-script) – Chris

+0

@ScottHunter foo2.py ist eher eine lange Datei. aber die wichtigsten Befehle importieren eine Excel-Datei mit openpyxl-Modul und dann bearbeiten. Einige Dateikopien finden auch in den letzten Zeilen der Datei statt. – user179892

Antwort

0

Eine alternative Lösung bestand darin, Batch-Skripts zu verwenden, um meine Python-Dateien in der Haupt-Python-Datei auszuführen. Ich habe eine Batch-Datei wie folgt aus:

runFoo2.bat

cd Dir 
python.exe foo2.py 
cd .. 

Und dann verändert foo1.py so dass:

foo1.py

from subprocess import call 
def runFoo2(): 
    p = call("runFoo2.bat") 

Alles fein danach arbeitete.

Verwandte Themen