繁体   English   中英

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

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

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

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

好的,终于找到了一个简单但超级可靠的方法:检查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'

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

也许每个解释器也有办法钩入自定义完成或格式化程序。

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

那些花哨的 REPL 使用它们的启动脚本进行初始化。

可以在另一个 REPL 中运行一个 REPL,因此您需要从上到下遍历调用堆栈,直到从 REPL init 脚本中找到一个框架。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM