如何让Python脚本在正常调用时调用"python -i"?

20

我有一个 Python 脚本,我希望可以通过 python -i script.py 命令运行该脚本,并进入交互模式,以便我可以查看结果并交互操作。

现在的问题是,是否可以让脚本本身调用这个选项呢?这样我就可以直接运行 python script.py 命令,脚本会在运行后自动进入交互模式。

当然,我可以简单地添加 -i 参数来实现目的。如果觉得麻烦,也可以编写一个 shell 脚本来实现该功能。


5
未经请求的公共服务声明:如果您使用 'python -i' 并且喜欢制表符自动完成功能,那么您应该尝试一下 iPython(粉丝,无关联)。 - JS.
我通常使用 import IPython; IPython.embed() 来玩弄我的应用程序状态。你可能会发现它很有用。 - Blender
1
@Blender为什么不把这个加到答案里呢?另外,楼主我认为这个编辑是不必要的,如果用户看到这个问题,他会往下滚动查看答案。 - Dimitris Fasarakis Hilliard
@Jim:这跟 code.interact(local=locals()) 差别不大,只是交互解释器更好看一些而已。你仍然需要在脚本的末尾添加代码来嵌入它。 - Blender
@Blender 好的,我会将它作为我的答案附加说明,以便在更显眼的位置上呈现。 - Dimitris Fasarakis Hilliard
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'  

8
除了以上所有的答案,你可以使脚本运行变得简单,只需将文件设置为可执行并设置shebang行,例如:./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
@MatthewMoisen 有一些特定于平台的方法可以很好地完成它,还有一些可怕的黑客技巧可能在更多地方起作用。有关完整详细信息,请参见:https://dev59.com/qXA75IYBdhLWcg3wboUz - porglezomp
#!/usr/bin/env PYTHONINSPECT=1 python - donkopotamus
正如我在链接答案的评论中提到的那样,@donkopotamus,这似乎在某些平台上有效,但在其他平台上无效。 - porglezomp

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指出,您也可以通过使用以下方法嵌入IPython REPL:

import IPython
IPython.embed()

这样做的好处是不需要通过locals传递已在脚本中填充的命名空间。

3
我认为您正在寻找 这个
import code
foo = 'bar'
print foo
code.interact(local=locals())

1
我会简单地使用一个shell脚本来调用脚本。
exec python -i "$(dirname "$0")/script.py"

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