如何编写ipythonshell的包装器?
我想创建一个围绕IPython interactive shell的自定义shell。它应该具有IPython shell所具有的大部分功能,除此之外,我还想在它进入它下面的IPython shell之前预处理一些自定义命令,如“dance”或“knock-knock” 从视觉上看,它应该像:如何编写ipythonshell的包装器?,python,linux,shell,ipython,Python,Linux,Shell,Ipython,我想创建一个围绕IPython interactive shell的自定义shell。它应该具有IPython shell所具有的大部分功能,除此之外,我还想在它进入它下面的IPython shell之前预处理一些自定义命令,如“dance”或“knock-knock” 从视觉上看,它应该像: >>> print("IPython will handle this") "IPython will handle this" >>> dance "I will h
>>> print("IPython will handle this")
"IPython will handle this"
>>> dance
"I will handle this myself"
我环顾四周,尝试了几种可能的方法,但我真的不确定
以下是我尝试过的东西:
IPython.get_IPython()
获取交互式IPython shell的实例并与之乒乓。我真的找不到关于这个的有用文档。我发现可能有用的run\u cell()
函数不能执行类似run\u cell(“for I in range(10):”)
的操作,并等待缩进的下一行。它只是抛出Popen
打开IPython会话并用它打乒乓球。我学习了一些关于使用管道的教程,但我要么得到了破损的管道,要么得到了一些有线的东西。在我深入研究之前,我肯定需要复习一下我的操作系统课程任何评论都会有帮助。提前感谢:)您的预处理是用Python进行的吗?如果是这样的话,您可以查看一下,它允许您将用户输入转换为您喜欢的任何内容。这就是魔法的工作原理。根据您想做的工作类型,有不同级别的输入转换 请注意,如果没有变量隐藏魔术,并且您定义了一个名为
dance
的魔术,那么[1]:dance中的将触发魔术的代码,而不是语法错误,这可能比自定义语法转换器容易得多。在你的情况下,一个神奇的名字knock
和dance
就足够了。magics前面的%
仅在某些情况下用于消除歧义,否则是不必要的。这就是cd
,ls
,pwd
。。。在IPython工作(从技术上讲,它们是别名,但技术上的区别与此无关)。是如何定义自定义魔法的
如果您真的需要覆盖,您需要子类化,并且您可以告诉IPython通过将其与您的自定义类交换。一旦你让它与终端一起工作,它应该很容易成为一个内核,但这也需要与IPykernel一起工作,这是使事情复杂化的第一步