有很多种类的Python REPL,比如默认的REPL,ptpython,ipython,bpython等。当我已经进入REPL时,有没有办法检查当前的REPL是什么?
一点背景:
您可能已经听过,我让pdir2生成了漂亮的dir()
打印。我面临的一个挑战是使它与那些第三方REPL兼容,但首先我需要知道程序运行的是哪个REPL。
答案 0 :(得分:1)
好的,终于找到了一种简单但超级可靠的方法:检查sys.modules
。
您可以复制和使用的功能。
import sys
def get_repl_type():
if any('ptpython' in key for key in sys.modules):
return 'PTPYTHON'
if any('bpython' in key for key in sys.modules):
return 'BPYTHON'
try:
__IPYTHON__
return 'IPYTHON'
except NameError:
return 'PYTHON'
答案 1 :(得分:0)
您可以做的最好的事情是查看sys.stdin
和stdout
并比较他们的类型。
也许每个解释器都有办法挂钩自定义完成或格式化程序。
答案 2 :(得分:0)
您可以尝试从调用堆栈中查找信息。
那些花哨的REPL使用他们的启动脚本进行初始化。
可以在另一个REPL中运行一个REPL,因此您需要从上到下遍历调用堆栈,直到从REPL init脚本中找到一个帧。