[英]Enter Interactive Mode In Python
我正在運行我的 Python 程序,並且有一點需要跳進去看看發生了什么,然后再退出。 有點像臨時控制台模式。
在 Matlab 中,我會使用keyboard
命令來執行此操作,但我不確定 python 中的命令是什么。
有沒有辦法做到這一點?
例如:
for thing in set_of_things:
enter_interactive_mode_here()
do_stuff_to(thing)
當enter_interactive_mode()
調用時,我想去那里,環顧四周,然后離開並讓程序繼續運行。
code.interact()
似乎以某種方式工作:
>>> import code
>>> def foo():
... a = 10
... code.interact(local=locals())
... return a
...
>>> foo()
Python 3.6.5 (default, Apr 1 2018, 05:46:30)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> a
10
Ctrl + Z返回到“主”解釋器。
你可以閱讀當地人,但修改他們似乎並沒有這樣工作。
python -i myapp.py
這將執行myapp.py
並將您放入交互式 shell。 從那里你可以執行函數並檢查它們的輸出,加載myapp.py
的整個環境(導入等)。
對於更復雜的東西 - 最好使用像pdb
這樣的調試器,設置斷點。 此外,大多數 IDE(PyDev、PyCharm、Komodo...)都有圖形調試器。
為此,我使用pdb
。 我知道 Emil 已經在他的回答中提到了這一點,但他沒有提供示例或詳細說明為什么它可以回答您的問題。
for thing in set_of_things:
import pdb; pdb.set_trace()
do_stuff_to(thing)
您可以通過以感嘆號開始命令來讀取和設置變量。 您還可以在堆棧中上下移動(命令u
和d
), InteractiveConsole
沒有內置機制可以執行此操作。
要讓程序繼續執行,請使用c
命令。 在上面的示例中,它會在每次循環迭代時進入調試器,因此您可能希望將set_trace()
調用包裝在if
語句中。
您有多種選擇——Python 標准庫或 IPython。
Python 標准庫有一個code
模塊,它有一個InteractiveConsole
類,其目的是“密切模擬交互式 Python 解釋器的行為”。 這可能可以做你想做的事,但文檔沒有任何關於如何使用它的例子,我也沒有關於去哪里的任何建議。
IPython是一個更高級的 Python 終端,可以選擇在內置程序的任何位置嵌入控制台。根據他們的文檔,您可以簡單地做
from IPython import embed
for thing in set_of_things:
embed()
do_stuff_to(thing)
從 Python 3.7 開始,您還可以使用breakpoint()
進入調試器,例如:
for thing in set_of_things:
breakpoint()
do_stuff_to(thing)
這樣更容易記憶和編寫,默認情況下會在 pdb 中打開你的代碼。
但是,也可以將PYTHONBREAKPOINT
環境設置為可調用的名稱,它可以是另一個調試器,例如pudb
或ipdb
,也可以是 IPython 的embed
,或其他任何東西。
對我來說最舒服的工具是ipdb 。
ipdb 導出函數以訪問 IPython 調試器,它具有制表符完成、語法突出顯示、更好的回溯、更好的內省功能,與 pdb 模塊具有相同的接口。
完成和方便的內省對於調試特別有用。
您可以使用ipdb
。
要設置斷點,請添加
import ipdb; ipdb.set_trace()
import ipdb; ipdb.set_trace()
你想跳轉到調試器的地方。 到達斷點后,您將獲得一個交互式 shell 和斷點周圍的幾行代碼以獲取上下文。https://www.safaribooksonline.com/blog/2014/11/18/intro-python-debugger/
雖然它可能不是最合適的選擇,但有些簡單:
try:
while True:
print input()
except:
pass
將涵蓋許多案件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.