如何在Python解释器中执行文件?

我试图从解释器内使用Python命令执行一个文件。

编辑:我试图使用变量和设置从该文件,而不是调用一个单独的进程。

770994 次浏览

对于Python 2:

>>> execfile('filename.py')

对于Python 3:

>>> exec(open("filename.py").read())
# or
>>> from pathlib import Path
>>> exec(Path("filename.py").read_text())

看到的文档。如果你使用的是Python 3.0,请参见这个问题

参见@S的回答。Lott提供了一个示例,说明如何在执行完filename.py后访问全局变量。

几种方式。

  • 来自shell

    python someFile.py
    
  • 从IDLE内部,点击F5

  • 如果你是交互式输入,试试这个(Python3):

    >>> exec(open("filename.py").read())
    
  • 对于Python 2:

    >>> variables= {}
    >>> execfile( "someFile.py", variables )
    >>> print variables # globals from the someFile module
    

我试图使用该文件中的变量和设置,而不是调用一个单独的进程。

好吧,简单地导入带有import filename的文件(减去。py,需要在同一个目录或在你的PYTHONPATH上)将运行该文件,使其变量、函数、类等在filename.variable命名空间中可用。

因此,如果你有带有变量spam和函数eggs的cheddar.py,你可以用import cheddar导入它们,用cheddar.spam访问变量,并通过调用cheddar.eggs()运行函数

如果你在cheddar.py中有在函数之外的代码,它将立即运行,但是构建在导入上运行东西的应用程序将使你的代码很难重用。如果可能的话,把所有东西都放在函数或类中。

我不是专家,但这是我注意到的:

例如,如果你的代码是mycode.py,你只输入'import mycode', Python会执行它,但不会让解释器使用你的所有变量。我发现你应该输入'from mycode import *'如果你想让所有变量对解释器可用。

Python 2 + Python 3

exec(open("./path/to/script.py").read(), globals())

这将执行一个脚本,并将其所有的全局变量放在解释器的全局作用域中(大多数脚本环境中的正常行为)。

Python 3 exec文档 . cn

对于python3,使用xxxx = nameyourfile

exec(open('./xxxx.py').read())

没想到我还没见过。你可以执行一个文件,然后使用-i选项在执行结束后保持解释器打开:

| foo.py |
----------
testvar = 10


def bar(bing):
return bing*3


--------






$ python -i foo.py
>>> testvar
10
>>> bar(6)
18

在我看来,最好的办法是:

import yourfile

修改完你的file.py

reload(yourfile)

或者在python3中:

import imp;
imp.reload(yourfile)

但这将使函数和类看起来像这样: yourfile。function1 yourfile.class1…< / p >

如果你不能接受 最后的解决方案是:

reload(yourfile)
from yourfile import *

就做,

from my_file import *

确保不要添加.py扩展名。如果子目录中使用。py文件,

from my_dir.my_file import *

对于Python 3:

>>> exec(open("helloworld.py").read())

在运行该命令之前,请确保您在正确的目录中。

要从不同的目录运行一个文件,你可以使用下面的命令:

with open ("C:\\Users\\UserName\\SomeFolder\\helloworld.py", "r") as file:
exec(file.read())

假设你想要以下特性:

  1. 源文件在调试器中正常运行(文件名显示在堆栈中,等等)
  2. __name__ == '__main__'为True,因此脚本的行为与脚本相同。

exec(open('foo.py').read())失败特性1 import foo策略失败特性2

要做到这两点,你需要:

    source = open(filename).read()
code = compile(source, filename, 'exec')
exec(code)
python -c "exec(open('main.py').read())"