2009-09-08 22 views

回答

78

你可以嘗試使用交互式選項蟒蛇:

python -i program.py 

這將在program.py執行代碼,然後去REPL。您可以在program.py的頂層定義或導入任何內容。

+13

當你準備好切換到黑暗的一面時,ipython -i program.py就在你身邊。 – joeforker 2009-09-09 20:26:18

+0

令人印象深刻,簡單。 – Nishant 2014-01-02 14:52:27

+0

你只是想起了我。 – Bemmu 2017-02-24 01:10:18

16

可以啓動調試器:

import pdb;pdb.set_trace() 

不知道你想要什麼REPL的,但調試是非常相似的。

+3

我會懷疑他想要對正在運行的流程進行實時更改,la Lisp。 – Pinochle 2009-09-08 19:59:03

+1

有什麼辦法可以恢復執行啓動你進入pdb的腳本嗎? – 2013-12-11 20:37:16

+0

我傾向於在VIM中寫入代碼片段來保存它,然後執行!python -i%例如。或者pdb。這是一個很好的用例。 – Nishant 2014-01-02 14:03:58

38

這裏是你應該怎麼做(IPython中> v0.11):

import IPython 
IPython.embed() 

對於IPython的< = v0.11:

from IPython.Shell import IPShellEmbed 

ipshell = IPShellEmbed() 

ipshell() # this call anywhere in your program will start IPython 

你應該使用IPython中,巨蟒REPLs的凱迪拉克。見http://ipython.org/ipython-doc/stable/interactive/reference.html#embedding-ipython

從文檔:

它也可以是在科學 計算的情況下非常有用的地方是 共同需要做一些自動, 計算密集型部分, 然後停下來看看數據,地塊等 打開一個IPython實例會給你 完全訪問你的數據和 函數,並且一旦你完成 交互部分(perha),你就可以繼續執行程序 ps以後再次停止 ,根據需要多次)。

+3

IPython非常棒,但是如果OP想要一個只使用內置Python的解決方案,那麼Jason的code.InteractiveConsole()解決方案就是您「應該」這樣做的方式。 :-) – 2009-09-08 22:56:28

102

我經常使用這樣的:

def interact(): 
    import code 
    code.InteractiveConsole(locals=globals()).interact() 
+6

「代碼」模塊的文檔位於:http://docs.python.org/library/code.html – 2009-09-08 22:54:50

+36

您可以做得更簡單:import code; code.interact(local = locals()) – 2009-09-09 04:17:05

+1

在'pdb'中,你可以使用'interact'。 – gerrit 2014-08-19 23:05:57

14

要獲得使用IPython的和功能調試的,你應該使用ipdb

您可以以同樣的方式作爲PDB使用,增加的:

import ipdb 
ipdb.set_trace() 
0

我只是在我自己的一個腳本,這樣做(它運行的自動化框架,是一個巨大的PITA到儀器內部):

x = 0 # exit loop counter 
while x == 0: 
    user_input = raw_input("Please enter a command, or press q to quit: ") 
    if user_input[0] == "q": 
     x = 1 
    else: 
     try: 
      print eval(user_input) 
     except: 
      print "I can't do that, Dave." 
      continue 

只要將這個位置放在任何你想要斷點的位置,並且可以使用與python解釋器相同的語法來檢查狀態(雖然它似乎不能讓你做模塊導入)。 這不是很優雅,但它不需要任何其他設置。