这是一个重复的问题,但我仍然没有得到任何答案......
此处重复的问题click here
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
依此类推....我希望所有这些都被覆盖..每次循环执行时都会在2行中被覆盖...
我想要部分屏幕清洁只有那2行...没有完成屏幕清洁也没有运行多个空白行...希望我很清楚。 无论如何可能吗?
请有人帮忙......
这个问题是重复我接受但我找不到解决方案...请不要记下来我只是需要帮助...
请
答案 0 :(得分: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()
答案 1 :(得分:1)
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)
答案 2 :(得分:0)
希望这能解决您的问题。如果您有任何疑问,请告诉我。
flow
答案 3 :(得分:0)
它不适合您的原因是print()
会自动为每一行添加换行符\n
。将end=''
添加到打印调用以覆盖它。
print("\r" + "Done - " + str(i), end='')
答案 4 :(得分:0)
打印后,文本非常永久。只有这样你才能“改变”它所说的重印。只需在重新打印之前运行此代码,它应该清除屏幕。
print "\n" * 100
虽然你可以把它放在一个函数中:
def cls(): print "\n" * 100
然后在需要时将其称为cls()
答案 5 :(得分:0)
这可以解决问题,但它只适用于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
答案 6 :(得分:0)
您可以使用sys.stdout.write
和sys.stdout.flush
来实现此目的。这里"\033[F"
将光标向上移动一行(ANSI Escape Sequence)。它适用于基于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