2017-06-14 35 views
0

是否有一种简单的方法可以使ipython控制台将cmd行重定向到外部解析器,然后在当前会话中输出结果。ipython/python控制台与我自己的解析器/处理器?

说例如我有解析器计算表达式(只是为了举例)。 然后,我希望在CMD-符合“钙:”开始将它传递给这个外部解析器...这里是假设的例子:

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

很难实现新的语法和Python。 'ipython'%run' magic可以将命令行参数传递给脚本(解析它自己的参数,比如'-n'),所以如果你的'parser'可以从OS shell调用,它可以从'%run '.' ipython'使用'argparse'来解析它自己的命令行,并处理魔术参数。 – hpaulj

+0

会尝试......一般来说,这是我想将整行传递给外部解析器并打印回来的想法解析器会打印出来,%run的问题是会变得太多,例如>%run script.py text < – user1019129

回答

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

相关问题