使用我自己的解析器/处理器的ipython / python控制台?

时间:2017-06-14 22:22:56

标签: python parsing console ipython

是否有一种简单的方法可以让ipython控制台将cmd-line重定向到外部解析器,然后在当前会话中输出结果。

比如说我有解析器来计算表达式(仅为了示例)。 然后我想要cmd-line以" calc开始:"将它传递给这个外部解析器......这是一个假设的例子:

In[XX]: calc: 5 + 5
  external calc: 5 + 5 = 10

等等,你明白了......

这是我到目前为止最接近的: 首先创建一个shell脚本:

 #!/bin/sh
 echo $1

然后在ipython:

 In [473]: !./x 123
 123

如果它在系统路径中则更短:

 In [475]: !x 123
 123

现在,如果我可以在调用之间共享状态。

1 个答案:

答案 0 :(得分:0)

我让它成为扩展名:

from __future__ import print_function
from IPython.core.magic import (Magics, magics_class, line_magic, cell_magic, line_cell_magic)
from bi_lang import *

@magics_class
class BiMagics(Magics):

    def __init__(self, shell):
        super(BiMagics, self).__init__(shell)
        self.bi = BiLang()

    @line_magic
    def do(self, line):
        rv = self.bi.run(line)
        return rv

ip = get_ipython()
magics = BiMagics(ip)
ip.register_magics(magics)

然后:

 In [3]: %reload_ext ipython_extension
 In [4]: %do 5 + 6 
 ===== return ast =====
 Value
 +- val 11
 `- vtype 'num'

如果您需要更多信息,请点击此处: http://ipython.readthedocs.io/en/stable/config/custommagics.html#defining-magics