如何检查您正在使用的REPL类型?

时间:2017-03-13 13:51:25

标签: python ipython read-eval-print-loop bpython

有很多种类的Python REPL,比如默认的REPL,ptpython,ipython,bpython等。当我已经进入REPL时,有没有办法检查当前的REPL是什么?

一点背景:
您可能已经听过,我让pdir2生成了漂亮的dir()打印。我面临的一个挑战是使它与那些第三方REPL兼容,但首先我需要知道程序运行的是哪个REPL。

3 个答案:

答案 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.stdinstdout并比较他们的类型。

也许每个解释器都有办法挂钩自定义完成或格式化程序。

答案 2 :(得分:0)

您可以尝试从调用堆栈中查找信息。

那些花哨的REPL使用他们的启动脚本进行初始化。

可以在另一个REPL中运行一个REPL,因此您需要从上到下遍历调用堆栈,直到从REPL init脚本中找到一个帧。