我見過一些Python IDE(例如PyDev Extensions,WingIDE),它們提供了一個調試控制檯 - 一個交互式終端,它運行在斷點所在方法的上下文中。這使您可以打印成員,調用其他方法並查看結果,並重新定義方法以嘗試修復錯誤。涼。如何在Python中實現調試控制檯?
誰能告訴我這是如何實現的?我知道有Code模塊,它提供了一個InteractiveConsole類,但我不知道如何在當前加載的代碼的上下文中運行它。我對Python很陌生,所以我們會很感激你的幫助!
我見過一些Python IDE(例如PyDev Extensions,WingIDE),它們提供了一個調試控制檯 - 一個交互式終端,它運行在斷點所在方法的上下文中。這使您可以打印成員,調用其他方法並查看結果,並重新定義方法以嘗試修復錯誤。涼。如何在Python中實現調試控制檯?
誰能告訴我這是如何實現的?我知道有Code模塊,它提供了一個InteractiveConsole類,但我不知道如何在當前加載的代碼的上下文中運行它。我對Python很陌生,所以我們會很感激你的幫助!
對,我很慚愧地承認它實際上是在InteractiveConsole的文檔中。通過將locals()函數的結果傳遞給InteractiveConsole構造函數,可以使其在本地上下文中運行。我無法找到關閉InteractiveConsole而不殺死應用程序的方式,因此我將它擴展到僅在關閉控制檯時才捕獲SystemExit異常。我不喜歡它,但我還沒有找到更好的方法。
下面是一些演示調試控制檯的示例代碼(相當簡單)。
import code
class EmbeddedConsole(code.InteractiveConsole):
def start(self):
try:
self.interact("Debug console starting...")
except:
print("Debug console closing...")
def print_names():
print(adam)
print(bob)
adam = "I am Adam"
bob = "I am Bob"
print_names()
console = EmbeddedConsole(locals())
console.start()
print_names()
你可以試試看python調試器pdb。它就像gdb一樣在使用它,但是在純python中實現。在python安裝目錄中查找pdb.py。
http://docs.python.org/3.0/library/functions.html#input
http://docs.python.org/3.0/library/functions.html#eval
def start_interpreter():
while(True):
code = input("Python Console >")
eval(code)
我敢肯定,然而,其實施是遠不止此foolsafe。
Python在bdb module中有一個調試器框架。我不確定IDE的列表是否使用它,但肯定有可能用它來實現一個完整的Python調試器。
如果你想用自己的Python控制檯試驗,那麼這是一個良好的開端:
cmd = None
while cmd != 'exit':
cmd = raw_input('>>> ')
try:
exec(cmd)
except:
print 'exception'
但對於實際工作使用InteractiveConsole代替。
是不是input()相當於eval(raw_input())? – 2009-01-15 00:44:33