20

我有一个我喜欢运行的 python 脚本python -i script.py,它运行脚本然后进入交互模式,以便我可以玩弄结果。

是否可以让脚本本身调用此选项,这样我就可以运行python script.py并且脚本在运行后将进入交互模式?

当然,我可以简单地添加-i,或者如果这太费力,我可以编写一个 shell 脚本来调用它。

4

5 回答 5

22

从内部script.py,将PYTHONINSPECT环境变量设置为任何非空字符串。Python 会在程序结束时重新检查这个环境变量并进入交互模式。

import os
# This can be placed at top or bottom of the script, unlike code.interact
os.environ['PYTHONINSPECT'] = 'TRUE'  
于 2016-08-25T22:57:40.797 回答
8

除了上述所有答案之外,您还可以./script.py通过使文件可执行并设置 shebang 行来简单地运行脚本,例如

#!/usr/bin/python -i
this = "A really boring program"

如果您想将此命令与env命令一起使用以获得系统默认值python,那么您可以尝试使用评论中建议的@donkopotamus之类的 shebang

#!/usr/bin/env PYTHONINSPECT=1 python

但是,此操作的成功可能取决于env您平台上安装的版本。

于 2016-08-26T01:10:06.153 回答
6

你可以使用一个实例code.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在评论中所述,您还可以使用以下方法嵌入IPythonREPL:

import IPython
IPython.embed()

它的另一个好处是不需要在脚本中填充的命名空间与locals.

于 2016-08-25T22:58:07.917 回答
3

我想你在找这个

import code
foo = 'bar'
print foo
code.interact(local=locals())
于 2016-08-25T22:54:42.260 回答
1

我会简单地将脚本与调用它的 shell 脚本一起使用。

exec python -i "$(dirname "$0")/script.py"
于 2016-08-26T03:23:18.133 回答