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

时间:2009-06-22 15:05:00

标签: python

我正在尝试使用解释器中的python命令执行文件。

编辑:我正在尝试使用该文件中的变量和设置,而不是调用单独的进程。

12 个答案:

答案 0 :(得分:228)

对于Python 2:

>>> execfile('filename.py')

对于Python 3:

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

the documentation。如果您使用的是Python 3.0,请参阅this question

请参阅@ S.Lott的回答,了解如何在执行后从filename.py访问全局变量。

答案 1 :(得分:193)

有几种方式。

来自shell

python someFile.py

从IDLE内部,点击 F5

如果您正在以交互方式输入,请尝试以下操作:(仅限Python 2!)

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

答案 2 :(得分:88)

Python 2 + Python 3

User

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

Python 3 exec Documentation

答案 3 :(得分:33)

很惊讶我还没有看到这个。您可以执行文件,然后在执行终止后使用-i选项保持解释程序打开:

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

def bar(bing):
  return bing*3

--------



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

答案 4 :(得分:29)

  

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

好吧,只需使用import filename(减去.py,需要在同一目录或PYTHONPATH上)导入文件,就会运行文件,生成变量,函数,类等。filename.variable命名空间中可用。

因此,如果您有cheddar.py变量垃圾邮件和函数egg - 您可以使用import cheddar导入它们,使用cheddar.spam访问变量并通过调用{{1来运行该函数}}

如果cheddar.eggs()中的代码位于函数外部,它将立即运行,但构建在导入时运行内容的应用程序将使重用代码变得困难。如果一切皆有可能,将所有内容放在函数或类中。

答案 5 :(得分:8)

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

如果您的代码是mycode.py,并且您只键入'import mycode',Python将执行它,但它不会使所有变量可供解释器使用。我发现如果你想让解释器可以使用所有变量,你应该实际输入'from mycode import *'。

答案 6 :(得分:8)

对于python3,使用xxxx = name yourfile

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

答案 7 :(得分:7)

从我的观点来看,最好的方法是:

import yourfile

并在修改yourfile.py

之后
reload(yourfile)   

import imp; 
imp.reload(yourfile) in python3

但这将使函数和类看起来像这样: yourfile.function1,yourfile.class1 .....

如果你不能接受那些, 最终的解决方案是:

reload(yourfile)
from yourfile import *

答案 8 :(得分:7)

对于Python 3:

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

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

要从其他目录运行文件,可以使用以下命令:

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

答案 9 :(得分:3)

做,

Do you want to perform this Action [yes,yestoall,no,notoall,suspend]

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

from my_file import *

答案 10 :(得分:0)

假设您需要以下功能:

  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)

答案 11 :(得分:0)

python -c "exec(open('main.py').read())"