如何将ipython魔术输出存储到变量中

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)

kdo*_*pen 3

具体来说,对于历史命令,最简单的解决方案是

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)