我有一个功能,例如
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)函数内部。
答案 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)
结果:
\r
字符好吧,这是一个黑客,但我们无法修改f
,我们没有......完成任务。
在我们完成后,将sys.stdout
恢复为原始值可能很有用。
答案 2 :(得分:0)
如果您尝试仅打印最后一行,则可以管道输出并使用tail命令仅检索最后一个单词。
有用的链接:https://kb.iu.edu/d/acrj