如何在Python 3控制台

时间:2018-02-20 18:49:34

标签: python python-3.x

这是一个重复的问题,但我仍然没有得到任何答案......

此处重复的问题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行...没有完成屏幕清洁也没有运行多个空白行...希望我很清楚。 无论如何可能吗?

请有人帮忙......

这个问题是重复我接受但我找不到解决方案...请不要记下来我只是需要帮助...

7 个答案:

答案 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.writesys.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