有可能在交互模式下执行Python脚本吗?

75

通常情况下,您可以执行Python脚本,例如:python myscript.py,但是如果您处于交互模式,如何才能在文件系统上执行Python脚本呢?

>>> exec(File) ???

应该可以多次执行脚本。


2
为什么 myscript.py 没有一个适当的 "main" 函数?为什么不能通过 import myscriptmyscript.main() 来调用它?这是通常的方法,为什么不行?你能否修复 myscript 添加一个适当的 "main" 函数? - S.Lott
问题在于我正在加载一个“paster shell”,而在此过程中,其他项目库也被加载了。在这个交互式的shell中,我想尝试一些东西。但是,你说得对,你的建议很好。 - lennykey
5
这并不直接回答你所问的问题,但如果对你或其他人有用的话,我在开发时发现以下命令很实用:PYTHONSTARTUP=some_script.py python -i。这将执行some_script.py脚本,并让你进入一个交互式shell。如果你的工作脚本定义了局部变量,你可以从shell中访问它们。在尝试实验代码或事后分析行为时,这非常方便。 - Mark
6个回答

52

谢谢。我认为这对我有用,并且具有最少的配置样板文件。 - lennykey
3
对于我的同事(懒人们),"this"链接将带您到:exec(open("./filename").read())。 - José

43

如果不加上.py扩展名,使用import file可以导入模块,但是__name__将不会是"__main__"。所以,如果脚本进行任何检查来判断它是否在交互式运行中,那么您需要绕过这些检查。

或者,如果您想在脚本运行后查看环境,请尝试使用python -i script.py

编辑:要重新加载它

file = reload(file)


13
如果您希望在运行脚本后查看环境,请尝试使用命令 python -i script.py。非常感谢,这太棒了! - Matthew Moisen

14

你可能想要了解更强大的交互式终端工具IPython。它有各种“魔法”命令,包括%run script.py(当然,运行脚本并留下任何它定义的变量供您检查)。


2
这对我不起作用。我无法访问任何变量。可能是因为我把我的脚本放在main()中了吗? - LWZ
1
是的,在函数内部声明的局部变量将会超出其作用域。 - Ozgur Ozturk

5
您也可以使用subprocess模块。例如:
>>> import subprocess
>>> proc = subprocess.Popen(['./script.py'])
>>> proc.communicate()

2

您可以使用Python运行任何系统命令:

>>>from subprocess import Popen
>>>Popen("python myscript.py", shell=True)

3
Subprocess 不是最理想的选择。因为它运行在一个完全独立的进程中,你无法直接与其变量交互,并且需要另一个命令来查看其输出。 - Thomas K

2
最简单的方法是使用os模块:
import os

os.system('python script.py')

实际上,os.system('cmd') 用于运行shell命令。希望这已经足够了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接