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

Ada*_*tan 266 python

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

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

cod*_*ape 242

对于Python 2:

>>> execfile('filename.py')
Run Code Online (Sandbox Code Playgroud)

对于Python 3:

>>> exec(open("filename.py").read())
# or
>>> from pathlib import Path
>>> exec(Path("filename.py").read_text())
Run Code Online (Sandbox Code Playgroud)

请参阅文档.如果您使用的是Python 3.0,请参阅此问题.

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


S.L*_*ott 204

几种方式.

从壳

python someFile.py
Run Code Online (Sandbox Code Playgroud)

从IDLE里面,点击F5.

如果您以交互方式键入,请尝试此操作.

>>> variables= {}
>>> execfile( "someFile.py", variables )
>>> print variables # globals from the someFile module
Run Code Online (Sandbox Code Playgroud)

  • python3中不再存在execfile,并且exec()似乎没有以某种方式工作......不确定我做错了什么.你能更新答案吗? (39认同)
  • 如果你运行python 3,`python`不起作用,而是使用`python3`. (10认同)
  • @pzkpfw python可以指向任何版本的python.我看过***python v3的环境,其中`python`指向`python3`. (8认同)
  • 有什么方法可以从文件中提供“stdin”,例如在“execfile()”中使用“<”来执行脚本。?@s-洛特 (2认同)
  • @pzkpfw这取决于系统在查看环境变量`PATH`中的文件夹时找到的`python`可执行文件. (2认同)

Way*_*inn 92

Python 2 + Python 3

exec(open("./path/to/script.py").read(), globals())
Run Code Online (Sandbox Code Playgroud)

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

Python 3 exec文档

  • @ben 这不起作用,因为“open”直接从脚本中读取代码。要传递参数,请查看[此答案](/sf/answers/1307281741/),但不要使用“execfile”,而是显然使用“exec”和“open”,如上所示。 (2认同)

Ben*_*ers 43

很惊讶我还没见过.您可以执行文件,然后在执行终止后使用以下-i选项保持解释器打开:

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

def bar(bing):
  return bing*3

--------



$ python -i foo.py
>>> testvar 
10
>>> bar(6)
18
Run Code Online (Sandbox Code Playgroud)


mik*_*ikl 30

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

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

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

如果你的代码在cheddar.py函数之外,那么它将立即运行,但构建在导入时运行东西的应用程序会使重用代码变得困难.如果一切皆有可能,将所有内容放在函数或类中.

  • 正如问题所要求的那样,它不会使用全局命名空间.请改用`from filename import*` (4认同)

小智 9

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

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

  • 另外,它应该是评论,而不是答案. (3认同)

Neo*_* li 9

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

import yourfile
Run Code Online (Sandbox Code Playgroud)

并在修改yourfile.py之后

reload(yourfile)   
Run Code Online (Sandbox Code Playgroud)

要么

import imp; 
imp.reload(yourfile) in python3
Run Code Online (Sandbox Code Playgroud)

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

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

reload(yourfile)
from yourfile import *
Run Code Online (Sandbox Code Playgroud)


小智 8

对于python3请使用带xxxx = nameyourfile.

exec(open('./xxxx.py').read())
Run Code Online (Sandbox Code Playgroud)


Pra*_*nga 7

对于Python 3:

>>> exec(open("helloworld.py").read())
Run Code Online (Sandbox Code Playgroud)

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

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

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


Shi*_*hah 6

做就是了,

from my_file import *
Run Code Online (Sandbox Code Playgroud)

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

from my_dir.my_file import *
Run Code Online (Sandbox Code Playgroud)


Ken*_*art 5

假设您需要以下功能:

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

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

为了获得两者,你需要这个:

    source = open(filename).read()
    code = compile(source, filename, 'exec')
    exec(code)
Run Code Online (Sandbox Code Playgroud)