覆盖同一线路终端功能输出

时间:2016-09-25 19:05:33

标签: python python-2.7

我有一个功能,例如

def f(x):
    for i in range(x):
        print i

在f(x)函数中没有添加任何内容,是否可以在运行期间覆盖终端线?例如,在我的情况下它显示如下:

print f(5)

输出是:

1
2
3
4

但是我希望它覆盖,而是像这样打印:

print f(5)

4

请记住,我无法修改f(x)函数内部。

3 个答案:

答案 0 :(得分:0)

一般来说,没有;但取决于假定的“终端” 也许吧。许多终端窗口模仿古老的光标 从一个或多个“glass tty”终端定位命令。在 在哪种情况下,如果您假设您知道正在模拟哪个终端, 您可以发送光标定位命令以移回到上一个 在致电f。

之前

答案 1 :(得分:0)

由于print发出换行符,并且您不能在此之后返回,因此您必须不惜一切代价阻止在终端中发布换行符。

您可以通过重定向sys.stdout来完成此操作。 print将输出到您的新流。在您的信息流中,删除换行符并添加回车符。完成

import sys


def f(x):
    for i in range(x):
        print i

class fake():
    def __init__(self):
        self.__out = sys.stdout
    def write(self,x):
        r = self.__out.write(x.replace("\n","")+"\r")
        self.__out.flush()  # flush like if we wrote a newline
        return r


sys.stdout=fake()

f(5)

结果:

  • 在终端(Windows或Linux)上:仅显示4个
  • 重定向到文件:我们看到所有数字都以\r字符
  • 分隔

好吧,这是一个黑客,但我们无法修改f,我们没有......完成任务。

在我们完成后,将sys.stdout恢复为原始值可能很有用。

答案 2 :(得分:0)

如果您尝试仅打印最后一行,则可以管道输出并使用tail命令仅检索最后一个单词。

有用的链接:https://kb.iu.edu/d/acrj