Kir*_*hou 6 python ipython ipython-magic
我是一个python和Ipython初学者.这可能是一个微不足道的问题.它可能与其他问题重复.但是我不知道应该搜索哪些关键词.
我已经知道如何与shell交互.
例如:
In [1]: a = !ls
In [2]: a
...same ls result as shell...
In [3]: type(a)
Out[3]: IPython.utils.text.SList
Run Code Online (Sandbox Code Playgroud)
但是,如何与Ipython魔术互动?
例如
In [1]: a = %history -t
...Ipython result...
In [2]: a
In [3]: type(a)
Out[3]: NoneType
Run Code Online (Sandbox Code Playgroud)
具体来说,对于历史命令,最简单的解决方案是
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]:
Run Code Online (Sandbox Code Playgroud)
基本上,将其转储到文件中然后读回。
这可能看起来是一个拼凑,但我怀疑它来自 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]:
Run Code Online (Sandbox Code Playgroud)