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

2025-02-21 08:48:00
admin
原创
25
摘要:问题描述:我是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="")
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1325  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。它涵盖了从产品概念产生到产品退市的整个生命周期,通过整合跨部门团队、优化流程等方式,显著提升产品开发的效率和质量,进而为项目的成功奠定坚实基础。深入探究IPD流程的五个阶段与项目成功之间...
IPD流程分为几个阶段   4  
  华为作为全球知名的科技企业,其成功背后的管理体系备受关注。IPD(集成产品开发)流程作为华为核心的产品开发管理模式,其中的创新管理与实践更是蕴含着丰富的经验和深刻的智慧,对众多企业具有重要的借鉴意义。IPD流程的核心架构IPD流程旨在打破部门墙,实现跨部门的高效协作,将产品开发视为一个整体的流程。它涵盖了从市场需求分析...
华为IPD是什么   3  
  IPD(Integrated Product Development)研发管理体系作为一种先进的产品开发模式,在众多企业的发展历程中发挥了至关重要的作用。它不仅仅是一套流程,更是一种理念,一种能够全方位提升企业竞争力,推动企业持续发展的有效工具。深入探究IPD研发管理体系如何助力企业持续发展,对于众多渴望在市场中立足并...
IPD管理流程   3  
  IPD(Integrated Product Development)流程管理旨在通过整合产品开发流程、团队和资源,实现产品的快速、高质量交付。在这一过程中,有效降低成本是企业提升竞争力的关键。通过优化IPD流程管理中的各个环节,可以在不牺牲产品质量和性能的前提下,实现成本的显著降低,为企业创造更大的价值。优化产品规划...
IPD流程分为几个阶段   4  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用