Как проверить тип REPL, который вы используете?

Существует много видов Python REPL, таких как REPL по умолчанию, ptpython, ipython, bpython и т. Д. Есть ли способ проверить, какой сейчас текущий REPL, когда я уже в нем?

Немного предыстории:
Как вы, возможно, слышали, я сделал pdir2 для генерации довольно dir() печать. Проблема, с которой я сталкиваюсь, заключается в том, чтобы сделать ее совместимой с этими сторонними REPL, но сначала мне нужно узнать, в каком REPL запущена программа.

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'

Вы можете попытаться найти информацию из стека вызовов.

Эти причудливые REPL используют свой скрипт запуска для инициализации.

Можно запустить один REPL в другом, поэтому вам нужно обходить стек вызовов сверху вниз, пока не будет найден кадр из сценария инициализации REPL.

Наверное, лучшее, что вы можете сделать, это посмотреть на sys.stdin а также stdout и сравните их типы.

Возможно, есть также способы для каждого интерпретатора подключать пользовательские дополнения или форматеры.

Другие вопросы по тегам