繁体   English   中英

如何让python脚本在正常调用时调用“python -i”?

[英]How to get a python script to invoke "python -i" when called normally?

我有一个 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'  

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

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

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

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

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

您可以使用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一起传递。

我想你在找这个

import code
foo = 'bar'
print foo
code.interact(local=locals())

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

exec python -i "$(dirname "$0")/script.py"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM