我正在写一个FTP下载器。代码的一部分是这样的:
ftp.retrbinary("RETR " + file_name, process)
我正在调用函数process来处理回调:
def process(data):
print os.path.getsize(file_name)/1024, 'KB / ', size, 'KB downloaded!'
file.write(data)
输出是这样的:
1784 KB / KB 1829 downloaded!
1788 KB / KB 1829 downloaded!
etc...
但我希望它打印这一行,并在下次重新打印/刷新它,以便它只显示一次,我将看到该下载的进度。
怎么做呢?
发布于 2011-12-09 03:56:02
以下是Python 3.x的代码:
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+上使用相同的代码,请将以下行放在文件的顶部:
from __future__ import print_function
发布于 2011-02-04 19:17:55
如果您只想更改一行,那么可以使用\r
。\r
表示回车符。它的效果只是将插入符号放回当前行的开头。它不会擦除任何东西。类似地,可以使用\b
向后移动一个字符。(某些终端可能不支持所有这些功能)
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)
发布于 2011-02-04 19:17:05
看一看curses module documentation和curses module HOWTO。
真正基本的例子:
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()
https://stackoverflow.com/questions/4897359
复制相似问题