2024-06-16 14:21:04 发布
网友
Python REPL有很多种,比如默认REPL、ptpython、ipython、bpython等等。当我已经在其中时,有没有方法检查当前REPL是什么?你知道吗
一点背景: 你可能听说过,我制作了pdir2来生成漂亮的dir()打印。我面临的一个挑战是使它与那些第三方REPL兼容,但首先我需要知道程序运行在哪个REPL中。你知道吗
dir()
好了,终于找到了一个简单但超级可靠的方法:检查sys.modules。你知道吗
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是可能的,所以您需要自上而下遍历调用堆栈,直到从REPL init脚本中找到一个帧。你知道吗
也许你能做的最好的事情就是查看sys.stdin和stdout并比较它们的类型。你知道吗
sys.stdin
stdout
也许每个解释器也有办法钩住自定义的补全或格式化程序。你知道吗
好了,终于找到了一个简单但超级可靠的方法:检查
sys.modules
。你知道吗一个可以复制和使用的函数。你知道吗
您可以尝试从调用堆栈中查找信息。你知道吗
那些花哨的repl使用它们的启动脚本来初始化。你知道吗
在另一个REPL中运行一个REPL是可能的,所以您需要自上而下遍历调用堆栈,直到从REPL init脚本中找到一个帧。你知道吗
也许你能做的最好的事情就是查看
sys.stdin
和stdout
并比较它们的类型。你知道吗也许每个解释器也有办法钩住自定义的补全或格式化程序。你知道吗
相关问题 更多 >
编程相关推荐