有沒有一種方法可以通過編程強制Python腳本在執行中的任意點放入REPL中,即使腳本是從命令行?如何從Python代碼中放入REPL(讀取,評估,打印,循環)
我正在寫一個快速和骯髒的繪圖程序,我想從標準輸入或文件讀取數據,繪製它,然後放入REPL以允許定製繪圖。
有沒有一種方法可以通過編程強制Python腳本在執行中的任意點放入REPL中,即使腳本是從命令行?如何從Python代碼中放入REPL(讀取,評估,打印,循環)
我正在寫一個快速和骯髒的繪圖程序,我想從標準輸入或文件讀取數據,繪製它,然後放入REPL以允許定製繪圖。
你可以嘗試使用交互式選項蟒蛇:
python -i program.py
這將在program.py執行代碼,然後去REPL。您可以在program.py的頂層定義或導入任何內容。
這裏是你應該怎麼做(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以後再次停止 ,根據需要多次)。
IPython非常棒,但是如果OP想要一個只使用內置Python的解決方案,那麼Jason的code.InteractiveConsole()解決方案就是您「應該」這樣做的方式。 :-) – 2009-09-08 22:56:28
我經常使用這樣的:
def interact():
import code
code.InteractiveConsole(locals=globals()).interact()
「代碼」模塊的文檔位於:http://docs.python.org/library/code.html – 2009-09-08 22:54:50
您可以做得更簡單:import code; code.interact(local = locals()) – 2009-09-09 04:17:05
在'pdb'中,你可以使用'interact'。 – gerrit 2014-08-19 23:05:57
我只是在我自己的一個腳本,這樣做(它運行的自動化框架,是一個巨大的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解釋器相同的語法來檢查狀態(雖然它似乎不能讓你做模塊導入)。 這不是很優雅,但它不需要任何其他設置。
當你準備好切換到黑暗的一面時,ipython -i program.py就在你身邊。 – joeforker 2009-09-09 20:26:18
令人印象深刻,簡單。 – Nishant 2014-01-02 14:52:27
你只是想起了我。 – Bemmu 2017-02-24 01:10:18