Search code examples
pythonipythonread-eval-print-loopbpythonptpython

How to inspect the type of REPL you're using?


There're many kinds of Python REPL, like the default REPL, ptpython, ipython, bpython, etc. Is there a way to inspect what current REPL is when I'm already in it?

A little background:
As you may have heard, I made pdir2 to generate pretty dir() printing. A challenge I'm facing is to make it compatible with those third-party REPLs, but first I need to know which REPL the program is running in.


Solution

  • Ok, finally found a simple but super reliable way: checking sys.modules.

    A function you could copy and use.

    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'