用Pythonreplace控制台输出

我想知道如何在Python中创build一个非常漂亮的控制台,就像在某些C / C ++程序中一样。

我有一个循环做的事情,目前的产出是沿着的:

Doing thing 0 Doing thing 1 Doing thing 2 ... 

更新更新会是最后一行更新;

 X things done. 

我已经在一些控制台程序中看到了这个,我想知道是否/如何在Python中执行此操作。

一个简单的解决scheme就是在string前面写"\r"而不添加换行符。 如果string永远不会变短这是足够的…

 sys.stdout.write("\rDoing thing %i" % i) sys.stdout.flush() 

稍微复杂一点是进度条…这是我正在使用的东西:

 def startProgress(title): global progress_x sys.stdout.write(title + ": [" + "-"*40 + "]" + chr(8)*41) sys.stdout.flush() progress_x = 0 def progress(x): global progress_x x = int(x * 40 // 100) sys.stdout.write("#" * (x - progress_x)) sys.stdout.flush() progress_x = x def endProgress(): sys.stdout.write("#" * (40 - progress_x) + "]\n") sys.stdout.flush() 

您调用startProgress传递操作的描述,然后progress(x)其中x是百分比,最后是endProgress()

更优雅的解决scheme可能是:

 def progressBar(value, endvalue, bar_length=20): percent = float(value) / endvalue arrow = '-' * int(round(percent * bar_length)-1) + '>' spaces = ' ' * (bar_length - len(arrow)) sys.stdout.write("\rPercent: [{0}] {1}%".format(arrow + spaces, int(round(percent * 100)))) sys.stdout.flush() 

用value和endvalue来调用这个函数,结果应该是

 Percent: [-------------> ] 69% 

另一个答案可能会更好,但这是我正在做的。 首先,我做了一个叫做进度的function,打印退格字符:

 def progress(x): out = '%s things done' % x # The output bs = '\b' * 1000 # The backspace print bs, print out, 

然后我在主函数中循环调用它,如下所示:

 def main(): for x in range(20): progress(x) return 

这当然会抹去整条线路,但是你可以把它搞砸到做你想要的东西。 我结束了使用这种方法进度条。

如果我理解的很好(不确定),你想打印使用<CR>而不是<LR>

如果是这样的话,只要控制台terminal允许(当输出siredirect到一个文件时它会中断)。

 from __future__ import print_function print("count x\r", file=sys.stdout, end=" ") 

对于任何一个在今后几年(如我一样)磕磕绊绊的人,我调整了6502的方法,让进度条减less和增加。 在稍微更多的情况下有用。 感谢6502一个伟大的工具!

基本上,唯一的区别是每次调用progress(x)时都会写入#s和-s的整行,并且光标总是返回到bar的起始处。

 def startprogress(title): """Creates a progress bar 40 chars long on the console and moves cursor back to beginning with BS character""" global progress_x sys.stdout.write(title + ": [" + "-" * 40 + "]" + chr(8) * 41) sys.stdout.flush() progress_x = 0 def progress(x): """Sets progress bar to a certain percentage x. Progress is given as whole percentage, ie 50% done is given by x = 50""" global progress_x x = int(x * 40 // 100) sys.stdout.write("#" * x + "-" * (40 - x) + "]" + chr(8) * 41) sys.stdout.flush() progress_x = x def endprogress(): """End of progress bar; Write full bar, then move to next line""" sys.stdout.write("#" * 40 + "]\n") sys.stdout.flush()