当前位置:  开发笔记 > 编程语言 > 正文

如何在控制台上的相同位置写入输出?

如何解决《如何在控制台上的相同位置写入输出?》经验,为你挑选了6个好方法。

我是python的新手,我正在编写一些脚本来自动从FTP服务器等下载文件.我想显示下载的进度,但我希望它保持在相同的位置,例如:

输出:

正在下载文件FooFile.txt [47%]

我试图避免这样的事情:

     Downloading File FooFile.txt [47%]
     Downloading File FooFile.txt [48%]
     Downloading File FooFile.txt [49%]

我应该怎么做呢?


重复: 如何在命令行应用程序中打印当前行?



1> codelogic..:

您还可以使用回车:

sys.stdout.write("Download progress: %d%%   \r" % (progress) )
sys.stdout.flush()


是否可以使用多行进行此操作?可以说我有三种不同的下载,我想在每一行上显示每一个的进度.
非常常见且简单的解决方案 注意:如果您的线路长度超过终端的宽度,则会变得很难看.
我喜欢将`\ r`放在行的开头,并添加一个`\ x1b [K`来清除前一个文本.
对于python 3来说,最简单的解决方案(如下面的答案中所述)似乎是:`print("sample text",end ='\ r \n",flush = True)
我还必须添加对sys.stdout.flush()的调用,以便光标不会反弹
如果我有多行怎么办?例如,多个下载同时发生。当我仅添加换行符时,它似乎不起作用,它可以无限打印。即,`sys.stdout.write(“下载进度:%d %% \ n \ r”%(进度)))不起作用

2> gimel..:

使用像curses模块这样的终端处理库:

curses模块提供了curses库的接口,这是便携式高级终端处理的事实标准.


@Diego现在有一个Windows上的curses模块支持库.见http://stackoverflow.com/a/19851287/1426237

3> RSabet..:
Python 2

我喜欢以下内容:

print 'Downloading File FooFile.txt [%d%%]\r'%i,

演示:

import time

for i in range(100):
    time.sleep(0.1)
    print 'Downloading File FooFile.txt [%d%%]\r'%i,
Python 3
print('Downloading File FooFile.txt [%d%%]\r'%i, end="")

演示:

import time

for i in range(100):
    time.sleep(0.1)
    print('Downloading File FooFile.txt [%d%%]\r'%i, end="")


用于python 3+:print('下载文件FooFile.txt [%d %%]\r'%i,end ="")

4> Zach Scriven..:

\b多次打印退格符,然后用新号码覆盖旧号码.


使用回车符(例如'print'download ....\r'`)也不能清除以前的数据,但它可以防止必须知道备份的距离.

5> 小智..:
#kinda like the one above but better :P

from __future__ import print_function
from time import sleep

for i in range(101):
  str1="Downloading File FooFile.txt [{}%]".format(i)
  back="\b"*len(str1)
  print(str1, end="")
  sleep(0.1)
  print(back, end="")



6> TheRutubeify..:

对于Python 3xx:

import time
for i in range(10):
    time.sleep(0.2) 
    print ("\r Loading... {}".format(i)+str(i), end="")


打印(“ \ r正在加载... {}”。format(i),end =“”)
推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有