首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >输出到同一行是否覆盖以前的输出?

输出到同一行是否覆盖以前的输出?
EN

Stack Overflow用户
提问于 2011-02-04 19:13:48
回答 7查看 191.7K关注 0票数 124

我正在写一个FTP下载器。代码的一部分是这样的:

代码语言:javascript
复制
ftp.retrbinary("RETR " + file_name, process)

我正在调用函数process来处理回调:

代码语言:javascript
复制
def process(data):
    print os.path.getsize(file_name)/1024, 'KB / ', size, 'KB downloaded!'
    file.write(data)

输出是这样的:

代码语言:javascript
复制
1784  KB / KB 1829 downloaded!
1788  KB / KB 1829 downloaded!
etc...   

但我希望它打印这一行,并在下次重新打印/刷新它,以便它只显示一次,我将看到该下载的进度。

怎么做呢?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-12-09 03:56:02

以下是Python 3.x的代码:

代码语言:javascript
复制
print(os.path.getsize(file_name)/1024+'KB / '+size+' KB downloaded!', end='\r')

end=关键字在这里起作用--默认情况下,print()以换行符(\n)结尾,但也可以用不同的字符串代替。在这种情况下,以回车符结束行将使光标返回到当前行的开头。因此,对于这种简单的用法,不需要导入sys模块。print()实际上有a number of keyword arguments,可以用来极大地简化代码。

要在Python 2.6+上使用相同的代码,请将以下行放在文件的顶部:

代码语言:javascript
复制
from __future__ import print_function
票数 245
EN

Stack Overflow用户

发布于 2011-02-04 19:17:55

如果您只想更改一行,那么可以使用\r\r表示回车符。它的效果只是将插入符号放回当前行的开头。它不会擦除任何东西。类似地,可以使用\b向后移动一个字符。(某些终端可能不支持所有这些功能)

代码语言:javascript
复制
import sys

def process(data):
    size_str = os.path.getsize(file_name)/1024, 'KB / ', size, 'KB downloaded!'
    sys.stdout.write('%s\r' % size_str)
    sys.stdout.flush()
    file.write(data)
票数 44
EN

Stack Overflow用户

发布于 2011-02-04 19:17:05

看一看curses module documentationcurses module HOWTO

真正基本的例子:

代码语言:javascript
复制
import time
import curses

stdscr = curses.initscr()

stdscr.addstr(0, 0, "Hello")
stdscr.refresh()

time.sleep(1)

stdscr.addstr(0, 0, "World! (with curses)")
stdscr.refresh()
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4897359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档