[英]How do I make an interactive application at the command line with Python, rather than just a script which returns output?
[英]In Python, how do I debug with an interactive command line (and visual breakpoints?)
我最近從 Matlab 轉移到 Python。 Python 是一種更好的語言(從計算機科學家的角度來看),但是 Python IDE 似乎都缺少一個重要的東西:
一個合適的交互式調試器。
我在找:
通過在編輯器中的一行代碼旁邊單擊來以圖形方式設置斷點的能力。
在調試器中停止時運行任何代碼的能力,包括從我的代碼調用函數、顯示新窗口、播放音頻等。
發生錯誤時,調試器應自動在錯誤行打開交互式控制台。
完成交互式控制台后,您可以恢復正常執行。
Matlab 具有所有這些功能,並且它們的運行非常好,但是我在 Python 工具中找不到它們。
我試過了:
PyCharm:交互式控制台笨拙,經常無法出現,並且一直崩潰(我嘗試了幾個不同的版本和操作系統)。
IPython:無法設置斷點 - 以編程方式啟動 Python 控制台:您必須停止代碼,插入額外的代碼行,然后從頭開始再次運行才能執行此操作。 此外,如果不重新導入,您將無法訪問已導入的函數。
能夠在問題第一次出現時進行調試和修復對我來說非常重要,因為我在處理通常需要幾十分鍾才能重新運行的程序(計算神經科學)。
結論:目前沒有辦法在 Python 中完成所有這些。 讓我們希望 PyLab 的發展加速。
有許多Python IDE 。 這是一個主題: 用於Python的IDE是什么?
PyDev有這個。 雙擊灰色邊距欄。
PyDev有這個 。 這不是唯一的一個。 PyScripter的聲明功能似乎包含了這一點。
PyDev這樣做。 (我想。或者在最壞的情況下,您是否需要雙擊控制台消息,指出錯誤在代碼中的位置?)
PyDev有這個。 它被稱為“簡歷”。 它就是工具欄中綠色的“游戲”三角形。 其他一些軟件稱此功能為“繼續”。
在代碼的頂部,寫
import pdb
在您的代碼中,在您想要調試的任何地方使用以下語句。
pdb.set_trace()
每當滿足set_trace()
語句時,您將擁有一個交互式shell。
然后,您可以使用step(s)
, next(n)
, continue(c)
等來檢查執行流程,並打印變量值,例如print var
有關pdb的更多詳細信息, 請參閱此處
我一直在尋找相同的,但不幸的是,Python IDE在這一點上並不像Matlab那樣功能齊全。 對於科學編程,您還希望圖形/繪圖在完全不同的線程中運行,因此IPython集成至關重要。 據我所知,Matlab IDE功能從調試器更改工作區,然后影響隨后運行的代碼,這是非常獨特的。 某些 IDE中存在每個功能,但並不存在:
pdb
,它缺乏執行任何代碼的要求,並且在繼續之后使這些代碼影響命名空間。 據我所知,最接近Wing IDE 。 它是一種支持產品,但是如果您從Matlab轉換89美元/年用於非商業用途應該是可接受的(您可以先評估它)。 但對我來說,我最終決定改變我的工作流程,而不是使用任何復雜的IDE。 幾年前我看的時候,情況也許有所改善。
您可能還會對2013年4月的“ 為科學Python評估IDE”這篇文章感興趣。 它也沒有真正得出結論。
您可以在iPython Notebook中完成所有這些操作。 使用magic命令%pdb停止出錯。
看到你是從Matlab來的,我建議你看看
該頁面描述如下:
Python(x,y)是一個免費的科學和工程開發軟件,用於基於Python編程語言,Qt圖形用戶界面和Spyder交互式科學開發環境的數值計算,數據分析和數據可視化。
它不會滿足你的所有願望,但當我開始使用Python時,它確實讓我感到很舒服,來自Matlab。
希望能幫助到你
如果使用命令行,
alias ipythondebug='ipython --InteractiveShell.pdb true'
在你的 ~/.profile 中會給你像 Matlab 這樣的錯誤調試。 這當然需要安裝 ipython。
不確定恢復部分。
如果您希望錯誤時的調試是永久性的,您還可以編輯 ipython 配置文件。 見https://ipython.readthedocs.io/en/stable/interactive/magics.html#magic-pdb
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.