Sto cercando di eseguire un file con comandi Python dall'interprete.
EDIT: sto cercando di utilizzare variabili e impostazioni da quel file, non per invocare un processo separato.
Sto cercando di eseguire un file con comandi Python dall'interprete.
EDIT: sto cercando di utilizzare variabili e impostazioni da quel file, non per invocare un processo separato.
Risposte:
Diversi modi.
Dalla conchiglia
python someFile.py
Dall'interno di IDLE, premi F5 .
Se stai digitando in modo interattivo, prova questo: ( solo Python 2 !)
>>> variables= {}
>>> execfile( "someFile.py", variables )
>>> print variables # globals from the someFile module
Per Python3 , utilizzare:
>>> exec(open("filename.py").read())
pythonnon funziona se si esegue python 3, al suo posto python3viene utilizzato.
stdinda un file come usare <lo script in esecuzione con in execfile().? @ s-lott
pythonpunta python3.
pythonil sistema trova guardando attraverso le cartelle nella variabile d'ambiente PATH.
Per Python 2:
>>> execfile('filename.py')
Per Python 3:
>>> exec(open("filename.py").read())
# or
>>> from pathlib import Path
>>> exec(Path("filename.py").read_text())
Vedere la documentazione . Se stai usando Python 3.0, vedi questa domanda .
Vedi la risposta di @ S.Lott per un esempio di come accedi ai globali da nomefile.py dopo averlo eseguito.
exec(open("./path/to/script.py").read(), globals())
Questo eseguirà uno script e inserirà tutte le sue variabili globali nell'ambito globale dell'interprete (il comportamento normale nella maggior parte degli ambienti di scripting).
openlegge direttamente il codice dallo script. Per passare argomenti, guarda questa risposta , ma invece di execfile, ovviamente usa exece opencome mostrato sopra.
Sorpreso non l'ho ancora visto. È possibile eseguire un file e quindi lasciare l'interprete aperto al termine dell'esecuzione utilizzando l' -iopzione:
| foo.py |
----------
testvar = 10
def bar(bing):
return bing*3
--------
$ python -i foo.py
>>> testvar
10
>>> bar(6)
18
Sto cercando di utilizzare variabili e impostazioni da quel file, per non invocare un processo separato.
Bene, semplicemente importando il file con import filename(meno .py, deve essere nella stessa directory o sul tuo PYTHONPATH) verrà eseguito il file, rendendone disponibili le variabili, le funzioni, le classi, ecc filename.variable. Nello spazio dei nomi.
Quindi, se hai cheddar.pycon la variabile spam e le uova delle funzioni, puoi importarle con import cheddar, accedere alla variabile con cheddar.spamed eseguire la funzione chiamandocheddar.eggs()
Se il codice cheddar.pyè esterno a una funzione, verrà eseguito immediatamente, ma la creazione di applicazioni che eseguono elementi durante l'importazione renderà difficile riutilizzare il codice. Se possibile, metti tutto all'interno di funzioni o classi.
from filename import *
Dal mio punto di vista, il modo migliore è:
import yourfile
e dopo aver modificato yourfile.py
reload(yourfile)
o
import imp;
imp.reload(yourfile) in python3
ma questo renderà la funzione e le classi così: yourfile.function1, yourfile.class1 .....
Se non puoi accettarli, la soluzione finalmente è:
reload(yourfile)
from yourfile import *
Non sono un esperto, ma questo è quello che ho notato:
se il tuo codice è mycode.py per esempio, e digiti solo 'import mycode', Python lo eseguirà ma non renderà tutte le tue variabili disponibili all'interprete. Ho scoperto che dovresti digitare effettivamente 'from mycode import *' se vuoi rendere disponibili tutte le variabili all'interprete.
Basta fare,
from my_file import *
Assicurati di non aggiungere l'estensione .py. Se usi il tuo file .py nella sottodirectory,
from my_dir.my_file import *
Per Python 3:
>>> exec(open("helloworld.py").read())
Assicurati di essere nella directory corretta prima di eseguire il comando.
Per eseguire un file da una directory diversa, è possibile utilizzare il comando seguente:
with open ("C:\\Users\\UserName\\SomeFolder\\helloworld.py", "r") as file:
exec(file.read())
Supponendo che desideri le seguenti funzionalità:
__name__ == '__main__' è True, quindi gli script si comportano correttamente come script.La exec(open('foo.py').read())funzione non riuscita 1 La import foostrategia non funziona 2
Per ottenere entrambi, è necessario questo:
source = open(filename).read()
code = compile(source, filename, 'exec')
exec(code)