Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写ipythonshell的包装器?_Python_Linux_Shell_Ipython - Fatal编程技术网

如何编写ipythonshell的包装器?

如何编写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

我想创建一个围绕IPython interactive shell的自定义shell。它应该具有IPython shell所具有的大部分功能,除此之外,我还想在它进入它下面的IPython shell之前预处理一些自定义命令,如“dance”或“knock-knock”

从视觉上看,它应该像:

>>> print("IPython will handle this")
"IPython will handle this"
>>> dance
"I will handle this myself"
我环顾四周,尝试了几种可能的方法,但我真的不确定

以下是我尝试过的东西:

  • 子类IPython.kernel或类似的东西。这似乎更复杂,我需要,我尝试了它没有成功(不能真正理解它在做什么…)
  • 使用
    IPython.get_IPython()
    获取交互式IPython shell的实例并与之乒乓。我真的找不到关于这个的有用文档。我发现可能有用的
    run\u cell()
    函数不能执行类似
    run\u cell(“for I in range(10):”)
    的操作,并等待缩进的下一行。它只是抛出
  • 使用
    Popen
    打开IPython会话并用它打乒乓球。我学习了一些关于使用管道的教程,但我要么得到了破损的管道,要么得到了一些有线的东西。在我深入研究之前,我肯定需要复习一下我的操作系统课程
  • 我真的不确定该怎么做。我记得SageMath也做过类似的事情,但不能很好地理解他们的源代码


    任何评论都会有帮助。提前感谢:)

    您的预处理是用Python进行的吗?如果是这样的话,您可以查看一下,它允许您将用户输入转换为您喜欢的任何内容。这就是魔法的工作原理。根据您想做的工作类型,有不同级别的输入转换

    请注意,如果没有变量隐藏魔术,并且您定义了一个名为
    dance
    的魔术,那么[1]:dance中的
    将触发魔术的代码,而不是语法错误,这可能比自定义语法转换器容易得多。在你的情况下,一个神奇的名字
    knock
    dance
    就足够了。magics前面的
    %
    仅在某些情况下用于消除歧义,否则是不必要的。这就是
    cd
    ls
    pwd
    。。。在IPython工作(从技术上讲,它们是别名,但技术上的区别与此无关)。是如何定义自定义魔法的

    如果您真的需要覆盖,您需要子类化,并且您可以告诉IPython通过将其与您的自定义类交换。一旦你让它与终端一起工作,它应该很容易成为一个内核,但这也需要与IPykernel一起工作,这是使事情复杂化的第一步