【发布时间】:2010-11-04 21:22:29
【问题描述】:
我正在尝试使用解释器中的 Python 命令执行文件。
编辑:我正在尝试使用该文件中的变量和设置,而不是调用单独的进程。
【问题讨论】:
标签: python
我正在尝试使用解释器中的 Python 命令执行文件。
编辑:我正在尝试使用该文件中的变量和设置,而不是调用单独的进程。
【问题讨论】:
标签: python
对于 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 访问全局变量的示例。
【讨论】:
几种方法。
从外壳
python someFile.py
在 IDLE 中,按 F5。
如果您以交互方式输入,请尝试以下操作:(仅限 Python 2!)
>>> variables= {}
>>> execfile( "someFile.py", variables )
>>> print variables # globals from the someFile module
对于 Python3,使用:
>>> exec(open("filename.py").read())
【讨论】:
python 在运行 python 3 时不起作用,而是使用 python3。
stdin,例如使用< 到execfile() 中的执行脚本? @s-lott
python 指向python3。
PATH 中的文件夹时发现的python 可执行文件。
我正在尝试使用该文件中的变量和设置,而不是调用单独的进程。
好吧,只需使用 import filename(减去 .py,需要在同一目录中或在您的 PYTHONPATH 上)导入文件即可运行该文件,使其变量、函数、类等在filename.variable 命名空间。
因此,如果您有 cheddar.py 与变量 spam 和函数鸡蛋 - 您可以使用 import cheddar 导入它们,使用 cheddar.spam 访问变量并通过调用 cheddar.eggs() 运行函数
如果您在cheddar.py 中有位于函数之外的代码,它将立即运行,但是构建在导入时运行的应用程序将难以重用您的代码。如果可能,请将所有内容放在函数或类中。
【讨论】:
from filename import *
我不是专家,但这是我注意到的:
例如,如果您的代码是 mycode.py,并且您只键入“import mycode”,Python 将执行它,但它不会使您的所有变量都可用于解释器。我发现如果你想让所有变量对解释器可用,你实际上应该输入'from mycode import *'。
【讨论】:
exec(open("./path/to/script.py").read(), globals())
这将执行一个脚本并将它的所有全局变量放在解释器的全局范围内(大多数脚本环境中的正常行为)。
【讨论】:
open 直接从脚本中读取代码。要传递参数,请查看this answer,但不是execfile,显然使用exec 和open,如上所示。
对于 python3 使用 xxxx = name 或 yourfile。
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
在修改 yourfile.py 之后
reload(yourfile)
或者在python3中:
import imp;
imp.reload(yourfile)
但这会使函数和类看起来像这样: yourfile.function1, yourfile.class1.....
如果你不能接受这些, 最后的解决方案是:
reload(yourfile)
from yourfile import *
【讨论】:
from importlib import reload。看起来imp 已合并到importlib
做吧,
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())
【讨论】:
假设您需要以下功能:
__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())"
【讨论】: