Diciamo che ho un file foo.py, e all'interno del file voglio eseguire un file bar.py. Ma, bar.py non si trova nella stessa directory di foo.py, è in una sottodirectory chiamata baz. execfile
funzionerà? Che mi dici di os.system
?Come eseguire un file Python non in una directory da un altro file Python?
risposta
Basta aggiungere un __init__.py
file vuoto per segnalare baz
è un modulo e, da foo.py
fare:
from baz import bar
meno che, naturalmente, si ha una buona ragione per non fare baz
in un modulo (e utilizzare execfile).
La domanda implica che si desidera eseguirli come script, quindi sì: è possibile utilizzare execfile in 2.X o subprocess (chiamare l'interprete e passare lo script come argomento). Hai solo bisogno di fornire percorsi assoluti ai file.
# Python 2.X only!
execfile ('c:/python/scripts/foo/baz/baz.py')
Farlo letteralmente è fragile, ovviamente. Se baz è sempre una subirectory di foo si potrebbe derivare da di file di foo:
baz_dir = os.path.join(os.path.dirname(__file__), "baz")
baz_file = os.path.join(baz_dir, "baz.py")
execfile(baz_file)
Se entrambi i file sono in posizioni che possono essere visti dal pitone - vale a dire, le cartelle sono in sys.path o sono stati aggiunto al percorso di ricerca utilizzando site è possibile importare baz da foo e richiamare direttamente le sue funzioni. Se devi effettivamente agire sulle informazioni di baz, invece di attivare un'azione, questo è un modo migliore di andare. As long as there is an init.py in each folder Si può solo fare
import baz
baz.do_a_function_defined_in_baz()
import sys, cambiamento "sys.path" aggiungendo il percorso durante la fase di esecuzione, quindi importare il modulo che vi aiuterà
Grazie, sto lavorando su questo diritto adesso. – user1938464