【问题标题】:How to inspect the type of REPL you're using?如何检查您正在使用的 REPL 类型?
【发布时间】:2017-08-03 13:39:00
【问题描述】:

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

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

【问题讨论】:

  • 好的,所以 ipython 解决了。 bpythonbpython 不提供此类检查。
  • 也许启发式:sys.executable
  • 我试过了,它显示了系统的python位置,比如/usr/local/opt/python3/bin/python3.6
  • 啊。也许sys.stdinstdout 提供了更好的区分方法。但它们也可能被应用程序重新定义。

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


【解决方案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'

【讨论】:

    【解决方案2】:

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

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

    可以在另一个REPL中运行一个REPL,所以你需要从上到下遍历调用堆栈,直到从REPL初始化脚本中找到一帧。

    【讨论】:

      【解决方案3】:

      您能做的最好的可能就是查看sys.stdinstdout 并比较它们的类型。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-05
        • 2023-03-22
        • 2016-02-22
        • 2013-03-14
        • 2015-09-18
        • 2020-01-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多