如何从Python中的stdout中删除行 - 在SciTe,Idle,Eclipse或其他带控制台的编辑器中

时间:2011-07-24 02:00:31

标签: python wxpython stdout pydev python-idle

对于标准Python控制台窗口,您可以删除最后一行,例如sys.stdout.write('\r'+' '*len(line))作为explained here

但是对于像SciTe,Idle或Eclipse(使用PyDev)这样的编辑器,stdout是一个文件类型的对象,可能会将其内容刷新到控制台窗口,使其缓冲区为空,因此一旦它出现就不允许修改内容在窗口。可以应用什么技巧,例如,擦除这种控制台的最后一行?有没有一种通用的方法,如果脚本在编辑器外部运行,写入标准的Python控制台窗口,会产生相同的结果吗?

编辑:检查类型(os.sys.stdout)显示:

  • SciTe:<type 'file'>
  • 空闲:<class 'idlelib.rpc.RPCProxy'>
  • Eclipse:<type 'file'>
  • Python控制台窗口:<type 'file'>

在标准的python控制台stdout中,结果stdout.write('\r')与SciTe和Eclipse的控制台不同,因此stdout的type没有定义它的实现。

编辑:只看到有similar problem的java人并且报告为bug ...

1 个答案:

答案 0 :(得分:1)

我得出结论认为这是不可能的,如果我错了,请纠正我。

Python控制台窗口(终端)不会“刷新”写入的行,直到传递下一行,就好像它在内存中保留一个回车,如'\ n',在写入时可以忽略('\ n \ r)。另外,更多基于GUI的控制台窗口(IDE)显然以不同的方式实现。所以也许它可能是一个功能请求来解释'\ r'来删除这些控制台中的前一行,这样所有控制台至少可以共享标准控制台的常见行为,但可能只有其他选项。

同时对我来说一个解决方案,因为用户可以将sys.stdout更改为新的控制台窗口,即questioned before,但回答不尽如人意......任何人都对此发展了一个下注者的意见?

或使用像curses模块那样的东西,但是用于Windows(对于Windows来说是'curses.py'),例如Console.py