Как проверить тип 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
и сравните их типы.
Возможно, есть также способы для каждого интерпретатора подключать пользовательские дополнения или форматеры.