如何在Python中从stdout删除行 - 在SciTe、Idle、Eclipse或其他带控制台的编辑器中
在标准的Python控制台窗口中,你可以用比如说 sys.stdout.write('\r'+' '*len(line))
来删除最后一行,就像我在这里解释的那样.
但是在像SciTe、Idle或Eclipse(带有PyDev)这样的编辑器中,标准输出(stdout)是一个文件类型的对象,它可能会把内容刷新到控制台窗口,这样就会让缓冲区变空,因此一旦内容出现在窗口中,就不能再修改了。那么,有什么办法可以用来,比如说,删除这样的控制台的最后一行呢?有没有一种通用的方法可以做到这一点,让脚本在编辑器外运行时也能在标准Python控制台窗口中产生相同的效果呢?
编辑:检查类型(os.sys.stdout)显示:
- SciTe:
<type 'file'>
- Idle:
<class 'idlelib.rpc.RPCProxy'>
- Eclipse:
<type 'file'>
- Python控制台窗口:
<type 'file'>
在标准的Python控制台中,stdout.write('\r')
的结果与SciTe和Eclipse的控制台不同,因此stdout的类型并不能决定它的实现方式。
编辑:刚看到Java的朋友们也遇到过类似的问题,并且报告这是一个bug...
1 个回答
我得出的结论是,这可能不太可能,如果我错了请纠正我。
在Python的控制台窗口(终端)中,写入的内容不会立刻显示出来,直到下一行被输入。这就像它在内存中保留了一个换行符('\n'),而在写入时可以忽略掉回车符('\r')。而其他一些更像图形界面的控制台窗口(比如IDE)显然是以不同的方式实现的。所以,也许可以提出一个功能请求,让这些控制台能够理解'\r',这样就能擦除之前的行,这样所有控制台至少在行为上能和标准控制台保持一致,只是可能会有一些额外的选项。
作为用户,我目前的解决办法是把sys.stdout
改成一个新的控制台窗口,这个问题之前有人问过,但回答得不太令人满意……有没有人对此有更好的看法呢?
或者使用类似于curses模块的东西,但要在Windows上使用(Windows上有'curses.py'吗?),比如Console.py。