我有一个 Python 脚本,我希望可以通过 python -i script.py
命令运行该脚本,并进入交互模式,以便我可以查看结果并交互操作。
现在的问题是,是否可以让脚本本身调用这个选项呢?这样我就可以直接运行 python script.py
命令,脚本会在运行后自动进入交互模式。
当然,我可以简单地添加 -i
参数来实现目的。如果觉得麻烦,也可以编写一个 shell 脚本来实现该功能。
我有一个 Python 脚本,我希望可以通过 python -i script.py
命令运行该脚本,并进入交互模式,以便我可以查看结果并交互操作。
现在的问题是,是否可以让脚本本身调用这个选项呢?这样我就可以直接运行 python script.py
命令,脚本会在运行后自动进入交互模式。
当然,我可以简单地添加 -i
参数来实现目的。如果觉得麻烦,也可以编写一个 shell 脚本来实现该功能。
在script.py
中,将PYTHONINSPECT
环境变量设置为任何非空字符串。Python将在程序结束时重新检查此环境变量并进入交互模式。
import os
# This can be placed at top or bottom of the script, unlike code.interact
os.environ['PYTHONINSPECT'] = 'TRUE'
./script.py
。#!/usr/bin/python -i
this = "A really boring program"
env
命令时获取系统默认的python
,那么您可以尝试像@donkopotamus在评论中建议的那样使用shebang。#!/usr/bin/env PYTHONINSPECT=1 python
env
版本的成功程度。#!/usr/bin/env python -i
一起运作吗?我遇到了一个/usr/bin/env: python -i: No such file or directory
的问题。 - Matthew Moisen#!/usr/bin/env PYTHONINSPECT=1 python
- donkopotamuscode.InteractiveConsole
的实例来实现此目的:from code import InteractiveConsole
i = 20
d = 30
InteractiveConsole(locals=locals()).interact()
使用python script.py
运行此命令将启动一个交互式解释器作为最终语句,并通过locals=locals()
使本地定义的名称可见。
>>> i
20
同样地,可以使用一个名为 code.interact
的便捷函数:
from code import interact
i = 20
d = 30
interact(local=locals())
这将为您创建一个实例,但唯一的限制是locals
被命名为local
。
除此之外,在评论中,@Blender指出,您也可以通过使用以下方法嵌入IPython
REPL:
import IPython
IPython.embed()
locals
传递已在脚本中填充的命名空间。exec python -i "$(dirname "$0")/script.py"
import IPython; IPython.embed()
来玩弄我的应用程序状态。你可能会发现它很有用。 - Blendercode.interact(local=locals())
差别不大,只是交互解释器更好看一些而已。你仍然需要在脚本的末尾添加代码来嵌入它。 - Blender