如何在控制台上的同一位置写入输出?
- 2025-02-21 08:48:00
- admin 原创
- 25
问题描述:
我是python新手,正在编写一些脚本来自动从FTP服务器下载文件等。我想显示下载的进度,但我希望它停留在同一个位置,如:
输出:
正在下载文件 FooFile.txt [47%]
我试图避免这样的事情:
Downloading File FooFile.txt [47%]
Downloading File FooFile.txt [48%]
Downloading File FooFile.txt [49%]
我该如何做呢?
重复: 如何在命令行应用程序中覆盖当前行打印?
解决方案 1:
您也可以使用回车键:
sys.stdout.write("Download progress: %d%%
" % (progress) )
sys.stdout.flush()
解决方案 2:
Python 2
我喜欢以下内容:
print 'Downloading File FooFile.txt [%d%%]
'%i,
演示:
import time
for i in range(100):
time.sleep(0.1)
print 'Downloading File FooFile.txt [%d%%]
'%i,
Python 3
print('Downloading File FooFile.txt [%d%%]
'%i, end="")
演示:
import time
for i in range(100):
time.sleep(0.1)
print('Downloading File FooFile.txt [%d%%]
'%i, end="")
带有 Python 3 的 PyCharm 调试器控制台
# On PyCharm Debugger console,
needs to come before the text.
# Otherwise, the text may not appear at all, or appear inconsistently.
# tested on PyCharm 2019.3, Python 3.6
import time
print('Start.')
for i in range(100):
time.sleep(0.02)
print('
Downloading File FooFile.txt [%d%%]'%i, end="")
print('
Done.')
解决方案 3:
使用终端处理库(例如curses 模块):
curses 模块提供了 curses 库的接口,该库是便携式高级终端处理的事实标准。
解决方案 4:
对于 Python 3xx:
import time
for i in range(10):
time.sleep(0.2)
print ("
Loading... {}".format(i)+str(i), end="")
解决方案 5:
打印退格符几次,然后用新号码覆盖旧号码。
解决方案 6:
#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=""*len(str1)
print(str1, end="")
sleep(0.1)
print(back, end="")
解决方案 7:
对我来说,一个简洁的解决方案是:
from __future__ import print_function
import sys
for i in range(10**6):
perc = float(i) / 10**6 * 100
print(">>> Download is {}% complete ".format(perc), end='
')
sys.stdout.flush()
print("")
很sys.stdout.flush
重要,否则它会变得非常笨重,并且print("")
循环退出也很重要。
更新:正如评论中提到的,print
也有一个flush
论点。因此,以下内容也将起作用:
from __future__ import print_function
for i in range(10**6):
perc = float(i) / 10**6 * 100
print(">>> Download is {}% complete ".format(perc), end='
', flush=True)
print("")
解决方案 8:
在 python 3 中,函数print可以接收许多参数。函数 print 的完整签名是:
`print(args*, sep=' ', end='
', file=sys.stdout, flush=False)`
whensep
是参数的分隔符args*
,end
是如何结束打印的行('\n\ 表示新行)file 是打印输出的位置(stdout 是 consul)并且 flush 是是否清理缓冲区。
使用示例
import sys
a = 'A'
b = 0
c = [1, 2, 3]
print(a, b, c, 4, sep=' * ', end='
' + ('-' * 21), file=sys.stdout, flush=True)
输出
A * 0 * [1, 2, 3] * 4
---------------------
在 python 中,有很多种方法可以格式化字符串,甚至有内置的格式化字符串类型。
如何格式化字符串
该
format()
功能。(一些例子)格式化的字符串文字或通用名称f-strings。
使用 % 进行格式化 (更多信息)
示例
name = 'my_name'
>>> print('my name is: {}'.format(name))
my name is: my_name
# or
>>> print('my name is: {user_name}'.format(user_name=name))
my name is: my_name
# or
>>> print('my name is: {0}'.format(name))
my name is: my_name
# or using f-strings
>>> print(f'my name is: {name}')
my name is: my_name
# or formatting with %
>>> print('my name is: %s' % name)
my name is: my_name
解决方案 9:
x="A Sting {}"
for i in range(0,1000000):
y=list(x.format(i))
print(x.format(i),end="")
for j in range(0,len(y)):
print("",end="")
相关推荐
热门文章
项目管理软件有哪些?
- 2025年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
热门标签
云禅道AD