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