2017-06-14 73 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

相關問題