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

2025-02-21 08:48:00
admin
原创
30
摘要:问题描述:我是python新手,正在编写一些脚本来自动从FTP服务器下载文件等。我想显示下载的进度,但我希望它停留在同一个位置,如:输出:正在下载文件 FooFile.txt [47%]我试图避免这样的事情: Downloading File FooFile.txt [47%] Downlo...

问题描述:

我是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 中,有很多种方法可以格式化字符串,甚至有内置的格式化字符串类型。

如何格式化字符串

  1. format()功能。(一些例子)

  2. 格式化的字符串文字或通用名称f-strings。

  3. 使用 % 进行格式化 (更多信息)

示例

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="")
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1343  
  信创产业的蓬勃发展推动着各行业数字化转型加速,数据库迁移作为其中关键一环,面临诸多挑战。信创数据库迁移旨在将传统数据库平稳过渡到信创环境,以满足自主可控、安全可靠的需求。这一过程涉及技术、业务等多方面因素,稍有不慎就可能出现各种问题,影响业务的正常运行。深入探讨信创数据库迁移过程中的常见问题及解决方案,对于保障迁移工作...
2027年信创国产化   41  
  随着信息技术的飞速发展,信创国产化成为了国家战略的重要组成部分。国产化信创产品名录涵盖了众多领域,其在各个关键应用场景中发挥着重要作用。而信创国产化操作系统作为其中的核心环节,具备五大核心优势,为我国信息技术产业的自主可控发展提供了坚实支撑。关键应用场景之办公领域在办公领域,国产化信创产品有着广泛且深入的应用。如今,越...
国产信创系统   37  
  随着信息技术的飞速发展,信创国产化操作系统在政府部门的推广应用具有重要的战略意义。它不仅关乎国家信息安全,更是推动国内信息技术产业自主创新、实现科技自立自强的关键举措。在当前复杂的国际形势下,政府部门积极推广信创国产化操作系统,对于保障国家政务信息的安全稳定运行,提升信息技术的自主可控能力,具有不可替代的重要作用。推广...
信创产品有哪些   28  
  在企业数字化转型的进程中,信创数据库解决方案的选择至关重要。它不仅关乎企业数据的安全存储与管理,更影响着企业业务的稳定运行与未来发展。合适的信创数据库能够助力企业在复杂多变的市场环境中提升竞争力,保障数据主权与安全。然而,面对市场上众多的信创数据库产品和解决方案,企业往往感到困惑,不知如何做出正确的选择。接下来,我们将...
信创电脑   24  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用