[英]How to print multiples lines at a same place in Python 3 console
这当然是一个重复的问题,但我仍然没有得到任何答案......
这里重复的问题点击这里
import time
print("The progress is going on as below...")
for i in range(1,6):
print("\r" + "Done - " + str(i))
print("\r" + "Left - " + str(5 - i))
time.sleep(2)
我想得到输出:
完成 - 1
左 - 4
并再次覆盖我想要的 1 和 4 ...
完成 - 2
左 - 3
再次通过写...
完成 - 3
左 - 2
等等......我希望所有这些都被覆盖......每次while循环执行时都在2行中......
我只想要部分屏幕清洁那 2 行...不是完整的屏幕清洁,也不是运行多个空白行...希望我很清楚。 无论如何可能?
好心人帮忙...
这个问题是重复的我接受但我找不到解决方案...请不要将其标记为我只是需要帮助...
请。
这是您正在寻找的库: https : //docs.python.org/2/howto/curses.html
import curses, time
stdscr = curses.initscr()
for i in range(0, 5):
stdscr.addstr(0, 0, '{0}'.format(i))
stdscr.refresh()
time.sleep(1)
curses.endwin()
试试这样的东西,它会在终端的左上角打印数字 0-4。
编辑:
这是您正在寻找的确切代码
import curses, time
stdscr = curses.initscr()
for i in range(1,6):
stdscr.addstr(0, 0, "Done - " + str(i))
stdscr.addstr(1, 0, "Left - " + str(5 - i))
stdscr.refresh()
time.sleep(2)
curses.endwin()
from curses import wrapper
import time
def main(stdscr):
# Clear screen
stdscr.clear()
for i in range(0, 5):
print("Done - %d" % i)
print("Left - %d" % (5 - i))
time.sleep(2)
stdscr.clear()
stdscr.refresh()
print('press any key ...')
stdscr.getkey()
wrapper(main)
希望这能解决您的问题。 如果您有任何疑问,请告诉我。
import time
import os
clear = lambda: os.system('cls')
clear()
for i in range(1,6):
print("\r" + "Done - " + str(i))
print("\r" + "Left - " + str(5 - i))
time.sleep(2)
if i!=5:
clear()
else:
exit()
它不适合您的原因是print()
自动向每一行添加一个换行符\\n
。 将end=''
添加到打印调用以覆盖它。
print("\\r" + "Done - " + str(i), end='')
打印后,文本几乎是永久性的。 你可以“改变”它所说的唯一方法是重印。 只需在重新打印之前运行此代码,它就会清除屏幕。
print "\n" * 100
虽然你可以把它放在一个函数中:
def cls(): print "\n" * 100
然后在需要时调用它作为 cls()
这可以解决问题,但它仅适用于 1 行。 对于多行,您将不得不使用其他解决方案之一,例如清除输出屏幕。
import time
for i in range(1,6):
print("\r" + "Done - " + str(i) + " pending - " + str(5 - i), end='')
time.sleep(2)
最终输出:
Done - 5 pending - 0
您可以使用sys.stdout.write
和sys.stdout.flush
来实现这一点。 这里"\\033[F"
将光标向上移动一行(这是一个ANSI 转义序列)。 它适用于基于 POSIX 的机器。 (PS:它不能在旧版本的 windows 上像 windows 和 DOS 一样工作,因为它们不支持 ANSI)
import sys
for i in range(1,6):
sys.stdout.write("\033[FDone - " + str(i))
sys.stdout.write("\nLeft - " + str(5 - i))
sys.stdout.flush()
time.sleep(2)
示例运行:
Done - 1
Left - 4
# after 2 seconds (last two lines replaced with)
Done - 2
Left - 3
# after 2 more seconds (last two lines replaced with)
Done - 3
Left - 2
# after 2 more seconds (last two lines replaced with)
Done - 4
Left - 1
# after 2 more seconds (last two lines replaced with)
Done - 5
Left - 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.