如何覆盖 Python 中的一行
How do I overwrite a line in Python
我创建了一个简单的 python 程序,最多可以数到 10
我想要实现的是让程序删除以前的号码并打印新号码
这是我创建的代码:
import sys
import time
for i in range(10):
text = "\r" + str(i)
sys.stdout.write(text)
sys.stdout.flush()
time.sleep(1)
输出:
0123456789
将代码更改为在 str(i)
之后添加 "\r"
也不起作用
import sys
import time
for i in range(10):
text = str(i) + "\r"
sys.stdout.write(text)
sys.stdout.flush()
time.sleep(1)
这也导致:
0123456789
我一直在寻找它来计算,最后只显示 9
但是它不会覆盖以前的数字
编辑:
我正在使用 Windows、Python3
编辑 2:
How to overwrite the previous print to stdout in python? 没有给我一个有效的答案,它仍然没有达到我想要的效果
因此,由于我的出色推理,它不是重复的 :P
作为替代方案,您可以使用 os.system("cls")
清除整个 window
我会这样做:
for x in range(10):
print("{}".format(x), end="\r")
为什么不使用python的标准打印呢?虽然在许多调试器屏幕中给出了这往往不起作用。在终端(ubuntu)它确实
import time
for i in range (10):
print(i, end='\r')
time.sleep(1)
可能对于 stdout 也存在一些东西,但在这种情况下我通常使用 python3
的打印
虚拟终端接受了一些控制符号。其中之一是 '\b',它将一个转车符移回一个位置。这个也被 Windows 接受,我将在下面的示例中使用它。 Unix 终端接受更多控件,包括颜色更改等。
from time import sleep
import sys, os
def clear ():
os.system("cls" if sys.platform.startswith("win") else "clear")
clear()
s = "1"
sys.stdout.write(s)
for x in range(2, 21):
sleep(1)
# Return carret to beginning of line:
l = len(s)
s = l*"\b"
sys.stdout.write(s)
# Clear line (just in case):
s = l*" "
sys.stdout.write(s)
# Return to the beginning again:
s = l*"\b"
sys.stdout.write(s)
# Write over new text:
s = str(x)
sys.stdout.write(s)
我相信您的代码应该可以完美运行。问题应该是您使用的是 Windows 终端。尝试使用 Linux。大多数代码在 Windows 中不起作用。您可以参考此 link 了解为什么您必须在 Windows.
上停止使用 python
这也是您可以尝试的替代代码。
import time
for i in range(10):
text = str(i)
print(text,end = "\r")
time.sleep(1)
使用end参数指定"\r"作为行尾。
import time
for i in range(10):
print(i, end="\r")
time.sleep(1)
我创建了一个简单的 python 程序,最多可以数到 10
我想要实现的是让程序删除以前的号码并打印新号码
这是我创建的代码:
import sys
import time
for i in range(10):
text = "\r" + str(i)
sys.stdout.write(text)
sys.stdout.flush()
time.sleep(1)
输出:
0123456789
将代码更改为在 str(i)
之后添加 "\r"
也不起作用
import sys
import time
for i in range(10):
text = str(i) + "\r"
sys.stdout.write(text)
sys.stdout.flush()
time.sleep(1)
这也导致:
0123456789
我一直在寻找它来计算,最后只显示 9
但是它不会覆盖以前的数字
编辑:
我正在使用 Windows、Python3
编辑 2:
How to overwrite the previous print to stdout in python? 没有给我一个有效的答案,它仍然没有达到我想要的效果
因此,由于我的出色推理,它不是重复的 :P
作为替代方案,您可以使用 os.system("cls")
我会这样做:
for x in range(10):
print("{}".format(x), end="\r")
为什么不使用python的标准打印呢?虽然在许多调试器屏幕中给出了这往往不起作用。在终端(ubuntu)它确实
import time
for i in range (10):
print(i, end='\r')
time.sleep(1)
可能对于 stdout 也存在一些东西,但在这种情况下我通常使用 python3
的打印虚拟终端接受了一些控制符号。其中之一是 '\b',它将一个转车符移回一个位置。这个也被 Windows 接受,我将在下面的示例中使用它。 Unix 终端接受更多控件,包括颜色更改等。
from time import sleep
import sys, os
def clear ():
os.system("cls" if sys.platform.startswith("win") else "clear")
clear()
s = "1"
sys.stdout.write(s)
for x in range(2, 21):
sleep(1)
# Return carret to beginning of line:
l = len(s)
s = l*"\b"
sys.stdout.write(s)
# Clear line (just in case):
s = l*" "
sys.stdout.write(s)
# Return to the beginning again:
s = l*"\b"
sys.stdout.write(s)
# Write over new text:
s = str(x)
sys.stdout.write(s)
我相信您的代码应该可以完美运行。问题应该是您使用的是 Windows 终端。尝试使用 Linux。大多数代码在 Windows 中不起作用。您可以参考此 link 了解为什么您必须在 Windows.
上停止使用 python这也是您可以尝试的替代代码。
import time for i in range(10): text = str(i) print(text,end = "\r") time.sleep(1)
使用end参数指定"\r"作为行尾。
import time
for i in range(10):
print(i, end="\r")
time.sleep(1)