對於歷史命令,具體而言,最簡單的解決方案是
In [243]: history -t -f history.txt
In [244]: with open('history.txt') as f:
.....: HIST = [l.strip() for l in f]
.....:
In [245]: len(HIST)
Out[245]: 258
In [246]: HIST[-1]
Out[246]: "get_ipython().magic(u'history -t -f history.txt')"
In [247]:
基本上,它轉儲到一個文件,並讀回。
這可能看起來很混亂,但我懷疑它來自IPython的本質。它實際上不是解釋器,而是底層解釋器的命令行shell。我懷疑魔術命令是在IPython內部處理的,並沒有經過將命令傳遞給解釋器的正常路徑,捕獲輸出並將其作爲Out [n]存儲在命令歷史記錄中。因此它不適用於召回和分配。
另一種方法是get_ipython().magic
只是返回None
。
無論哪種方式,屏幕輸出d = for %history
不可用。你必須將其轉儲到一個文件。
它似乎每魔術指令變化。例如,alias
確實返回屏幕輸出
In [288]: a=%alias
Total number of aliases: 17
In [289]: a
Out[289]:
[('cat', 'cat'),
('clear', 'clear'),
('cp', 'cp'),
('ldir', 'ls -F -G -l %l | grep /$'),
('less', 'less'),
('lf', 'ls -F -l -G %l | grep ^-'),
('lk', 'ls -F -l -G %l | grep ^l'),
('ll', 'ls -F -l -G'),
('ls', 'ls -F -G'),
('lx', 'ls -F -l -G %l | grep ^-..x'),
('man', 'man'),
('mkdir', 'mkdir'),
('more', 'more'),
('mv', 'mv'),
('rm', 'rm'),
('rmdir', 'rmdir'),
(u'show', u'echo')]
In [290]:
?歷史記錄會給你它定義的位置。導入IPython.core.magics.history.HistoryMagics將讓你打電話給它。 xxx = IPython.core.magics.history.HistoryMagics()和xxx.history()會報錯。然後我卡住了。 –