繁体   English   中英

如何在 Python 3 控制台中的同一位置打印多行

[英]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.writesys.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM