我經常會遇到這樣的情況:我將編寫一個腳本,然後我將腳本放到腳本的一部分中,我希望以交互方式處理一些變量。進入該部分需要運行我已經編寫的大部分腳本。python:從程序運行交互式python shell
在這種情況下,從shell內部運行該程序並不是微不足道的。我必須以某種方式重新創建該功能的條件。
我想要做的就是調用一個函數,如runshell()
,它將在程序中的那一刻運行python shell,將所有變量保持在範圍內,從而允許我在其中探索。
我該怎麼做呢?
我經常會遇到這樣的情況:我將編寫一個腳本,然後我將腳本放到腳本的一部分中,我希望以交互方式處理一些變量。進入該部分需要運行我已經編寫的大部分腳本。python:從程序運行交互式python shell
在這種情況下,從shell內部運行該程序並不是微不足道的。我必須以某種方式重新創建該功能的條件。
我想要做的就是調用一個函數,如runshell()
,它將在程序中的那一刻運行python shell,將所有變量保持在範圍內,從而允許我在其中探索。
我該怎麼做呢?
import code
code.interact(local=locals())
但使用Python調試器是可能更多你想要什麼:
import pdb
pdb.set_trace()
謝謝!我正在尋找這一段時間!導入代碼 – zx1986
如果你在PDB會話的斷點處,並且想從那裏下降到一個交互式Python shell中,那麼'import code; code.interact(local = locals())'事情對此很完美。當您點擊^ D並返回到調試會話時,交互式shell中定義的變量和函數就可用。非常感謝Michael Hoffman。 –
不完全是一個完美的來源,但我已經之前寫了幾個沙井,這裏是我爲一個廢棄的寵物項目寫的http://code.google.com/p/devdave/source/browse/pymethius/trunk/webmud/handlers/konsole.py
這裏是一個來自扭曲圖書館http://twistedmatrix.com/trac/browser/tags/releases/twisted-8.1.0/twisted/manhole/telnet.py the co nsole邏輯是Shell.doCommand
實用的角度來看,我想補充一點,你可以把調試痕量的一個班輪:
import pdb; pdb.set_trace()
這是一個很好行添加到編輯器支持片段,如TextMate或Vim + SnipMate。我已經設置了將「休息」擴展到上面的一個班輪。
是的這是我現在最終做的 – Claudiu
到目前爲止,我已經找到了最方便的方法是:
import IPython
IPython.embed()
你得到你所有的全局和局部變量和IPython中的所有物質享受:標籤完成,自動縮進等
您必須安裝IPython模塊才能使用它:
pip install ipython
我喜歡這個,只有一個警告。我必須重做我的進口。任何方式來通過導入到新的交互式外殼? – kdauria
您是否在談論使用Python調試器?或者您是否在尋找關於如何將大型腳本分解爲更易於管理的部分的設計建議? –
我在問前者 - 我忘了那個詞('調試器')! – Claudiu
[跳轉到Python交互式會話中程序?](http://stackoverflow.com/questions/925832/jump-into-a-python-interactive-session-mid-program) –