2017-03-13 53 views
4

Python REPL的種類很多,比如默認的REPL,ptpython,ipython,bpython等。有沒有一種方法可以檢查當前已經存在的REPL是什麼?如何檢查您正在使用的REPL的類型?

稍微背景:
正如你可能聽說過的,我讓pdir2產生漂亮的dir()打印。我面臨的挑戰是使其與第三方REPLs兼容,但首先我需要知道程序運行在哪個REPL中。

+1

https://stackoverflow.com/questions/5376837/how-can-i-do-an-if-run-from-ipython-test-in-python – languitar

+0

確定,所以IPython中解決。 'bpython'和'bpython'不提供這種檢查。 – laike9m

+0

也許是啓發式的:'sys.executable' – languitar

回答

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' 
0

可能最好的方法是看sys.stdinstdout和比較他們的類型。

也許每種解釋器都可以掛鉤自定義完成或格式化程序。

0

您可以嘗試從調用堆棧中查找信息。

那些花哨的REPL使用它們的啓動腳本進行初始化。

可以在另一箇中運行一個REPL,因此您需要從上到下遍歷調用堆棧,直到從REPL初始化腳本中查找一個幀。