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

lai*_*e9m 5 python ipython bpython read-eval-print-loop ptpython

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

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

lai*_*e9m 3

好吧,终于找到了一个简单但超级可靠的方法:检查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'
Run Code Online (Sandbox Code Playgroud)