Python REPL的種類很多,比如默認的REPL,ptpython,ipython,bpython等。有沒有一種方法可以檢查當前已經存在的REPL是什麼?如何檢查您正在使用的REPL的類型?
稍微背景:
正如你可能聽說過的,我讓pdir2產生漂亮的dir()
打印。我面臨的挑戰是使其與第三方REPLs兼容,但首先我需要知道程序運行在哪個REPL中。
Python REPL的種類很多,比如默認的REPL,ptpython,ipython,bpython等。有沒有一種方法可以檢查當前已經存在的REPL是什麼?如何檢查您正在使用的REPL的類型?
稍微背景:
正如你可能聽說過的,我讓pdir2產生漂亮的dir()
打印。我面臨的挑戰是使其與第三方REPLs兼容,但首先我需要知道程序運行在哪個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.stdin
和stdout
和比較他們的類型。
也許每種解釋器都可以掛鉤自定義完成或格式化程序。
您可以嘗試從調用堆棧中查找信息。
那些花哨的REPL使用它們的啓動腳本進行初始化。
可以在另一箇中運行一個REPL,因此您需要從上到下遍歷調用堆棧,直到從REPL初始化腳本中查找一個幀。
https://stackoverflow.com/questions/5376837/how-can-i-do-an-if-run-from-ipython-test-in-python – languitar
確定,所以IPython中解決。 'bpython'和'bpython'不提供這種檢查。 – laike9m
也許是啓發式的:'sys.executable' – languitar