Reputation: 136191
I'm trying to execute a file with Python commands from within the interpreter.
I'm trying to use variables and settings from that file, not to invoke a separate process.
Upvotes: 401
Views: 867225
Reputation: 391854
Several ways.
From the shell
python someFile.py
From inside IDLE, hit F5.
If you're typing interactively, try this (Python3):
>>> exec(open("filename.py").read())
For Python 2:
>>> variables= {}
>>> execfile( "someFile.py", variables )
>>> print variables # globals from the someFile module
Upvotes: 349
Reputation: 388
From my view, the best way is:
import yourfile
and after modifying yourfile.py
reload(yourfile)
or in python3:
import imp;
imp.reload(yourfile)
but this will make the function and classes looks like that: yourfile.function1, yourfile.class1.....
If you cannot accept those, the finally solution is:
reload(yourfile)
from yourfile import *
Upvotes: 20
Reputation: 412
Supposing you desire the following features:
__name__ == '__main__'
is True so scripts behave properly as scripts.The exec(open('foo.py').read())
fails feature 1
The import foo
strategy fails feature 2
To get both, you need this:
source = open(filename).read()
code = compile(source, filename, 'exec')
exec(code)
Upvotes: 5
Reputation: 100766
For Python 2:
>>> execfile('filename.py')
For Python 3:
>>> exec(open("filename.py").read())
# or
>>> from pathlib import Path
>>> exec(Path("filename.py").read_text())
See the documentation. If you are using Python 3.0, see this question.
See answer by @S.Lott for an example of how you access globals from filename.py after executing it.
Upvotes: 279
Reputation: 68728
Just do,
from my_file import *
Make sure not to add .py extension. If your .py file in subdirectory use,
from my_dir.my_file import *
Upvotes: 14
Reputation: 161
For Python 3:
>>> exec(open("helloworld.py").read())
Make sure that you're in the correct directory before running the command.
To run a file from a different directory, you can use the below command:
with open ("C:\\Users\\UserName\\SomeFolder\\helloworld.py", "r") as file:
exec(file.read())
Upvotes: 9
Reputation: 20257
exec(open("./path/to/script.py").read(), globals())
This will execute a script and put all it's global variables in the interpreter's global scope (the normal behavior in most scripting environments).
Upvotes: 114
Reputation: 932
Surprised I haven't seen this yet. You can execute a file and then leave the interpreter open after execution terminates using the -i
option:
| foo.py |
----------
testvar = 10
def bar(bing):
return bing*3
--------
$ python -i foo.py
>>> testvar
10
>>> bar(6)
18
Upvotes: 89
Reputation: 91
For python3 use either with xxxx = name
of yourfile
.
exec(open('./xxxx.py').read())
Upvotes: 8
Reputation: 105
I am not an expert but this is what I noticed:
if your code is mycode.py for instance, and you type just 'import mycode', Python will execute it but it will not make all your variables available to the interpreter. I found that you should type actually 'from mycode import *' if you want to make all variables available to the interpreter.
Upvotes: 8
Reputation: 24267
I'm trying to use variables and settings from that file, not to invoke a separate process.
Well, simply importing the file with import filename
(minus .py, needs to be in the same directory or on your PYTHONPATH
) will run the file, making its variables, functions, classes, etc. available in the filename.variable
namespace.
So if you have cheddar.py
with the variable spam and the function eggs – you can import them with import cheddar
, access the variable with cheddar.spam
and run the function by calling cheddar.eggs()
If you have code in cheddar.py
that is outside a function, it will be run immediately, but building applications that runs stuff on import is going to make it hard to reuse your code. If a all possible, put everything inside functions or classes.
Upvotes: 32