在ipython中运行任何命令之前,如何让文件自动运行?

时间:2011-04-23 00:28:13

标签: python ipython

我有一个python文件,其中包含一系列我不断修改的函数,然后在ipython中进行测试。我目前的工作流程是在每个命令之前运行“%run myfile.py”。但是,理想情况下,我希望自动发生这种情况。这可能吗?

2 个答案:

答案 0 :(得分:2)

我找不到任何优雅的方式。这是丑陋的方式。运行:

rlwrap awk '{print "%run myfile.py"} {print} {fflush()}' |ipython

从STDIN读取,但在每个命令之前打印您想要的命令。 fflush是禁用缓冲并立即将事物传递给ipython的。 rlwrap用于保持readline绑定;你可以删除它,如果你没有它,但这将不太方便(没有箭头键等)。

请注意,在出现ipython提示符之前,您必须输入命令。可能还有其他更令人烦恼的事情,我没有彻底测试过。

答案 1 :(得分:2)

如果您真的想使用rlwrap,请编写一个过滤器!只需定义一个input_handler,将%run myfile.py添加到输入中,然后echo_handler来回显原始输入,这样就不会发现这种情况(man RlwrapFilter告诉你所有人曾经想知道过滤器写作,然后一些)。

但是使用IPython.hooks.pre_runcode_hook在ipython中解决这个问题是不是更优雅?

import os
import IPython
ip = IPython.ipapi.get()

def runMyFile(self):
    ip.magic('%run myFile.py')
    raise IPython.ipapi.TryNext()

ip.set_hook('pre_runcode_hook', runMyFile)