包装stdin / stdout会导致IPython失去自动完成和历史记录功能

时间:2016-07-07 21:28:44

标签: python linux ipython getattr

我正在处理使用IPython的嵌入式shelling功能的脚本,并且作为一项要求,它必须将stdin / stdout中的所有数据记录到文件中。出于这个原因,我决定为他们写封皮;然而,在切换出流之后,我的嵌入式IPython shell失去了它的自动完成和历史记录功能,当我按下箭头按钮时输出这样的东西:

In [1]: ^[[A^[[B^[[A^[[C...

我猜测包装器会以某种方式阻止IPython识别用于向上,向下,向左和向右箭头的ANSI转义序列(ESC[#AESC[#B,{{1} },ESC[#C)。

这是一个演示我的问题的代码:

ESC[#D

关于如何解决这个问题的任何想法?

提前致谢。

1 个答案:

答案 0 :(得分:0)

@ Carreau(IPython核心开发人员)在Github对此问题的回复:

  

问题是特别是提示工具包stdout更多   而不是一个流,因为你在屏幕上绘制/擦除/重绘,和   因为它使用eventloop和async完成,你不能考虑   stdin / out / err足以了解当前的状态。

     

所以你(可能)需要挂钩到prompt_toolkit和   覆盖vt100输入/输出和/或windows窗口。

     

我们最有可能需要额外的钩子才能在IPython中设置它   启动。