创建一个Cell单元格,在单元格执行之前和之后执行代码

时间:2017-03-09 20:55:50

标签: ipython jupyter-notebook jupyter ipython-magic

我有一个特殊的类来捕获和处理给定算法的日志。这看起来像这样

report = Report2File(logger,"./path")
report.start()

solveProblem()

report.stop()
del report

我想成为更懒惰的事件,只写

%%report "./path"
solveProblem()

首先容易创建这样的Magic Cell接缝

更新:

@magics_class
class MyMagics(Magics):

    @cell_magic
    def cmagic(self, line, cell):
        "my cell magic"
        self.before()
        exec(cell)
        self.after()
        return line, cell

    def before(self):
        do stuff ...

    def after(self):
        do stuff ...

ip = get_ipython()
ip.register_magics(MyMagics)

但是我有两个问题:

  1. 我不知道如何将记录器对象传递给我的魔法
  2. Jupyter一直告诉我,MyMagics模块不是ipython扩展
  3. 部分答案

    this talk给了我2的答案。

    而不是

    ip = get_ipython()
    ip.register_magics(MyMagics)
    

    注册魔术的正确方法如下

    def load_ipython_extension(ip):
        ip.register_magics(MyMagics)
    
    def unload_ipython_extension(ip):
        pass
    

1 个答案:

答案 0 :(得分:0)

您还需要使用@magics_class(来自IPython.core.magic)装饰该类。
要传递参数,请查看@magic_arguments文档以获取示例:它非常容易理解。