python - 如何在控制台的最后一行和倒数第二行之间打印?

标签 python python-3.x

使用 Python 3.4,在最后一行和倒数第二行之间是否有一种与平台无关的打印方法?我想要完成的基本上是一个始终位于最后一行的进度条。第二行及以上只是调试日志。例如:

[DEBUG] Some info...
[DEBUG] More info...
Download Progress: [####      ] 40% (3 of 20)

我循环运行一些下载。循环的每次迭代我都运行它来打印进度条:

def _print_progress_bar(self):
    amt_done = self._count / self._max
    print('\rDownload Progress: [{:20s}] {:.1f}% ({})'.format(
        '#' * int(amt_done * 20),
        amt_done * 100,
        self._padded_counter(' of ')), end='')

在调用此方法以呈现进度条之间,我想在其上方插入诊断消息(基本上我不希望此后的 print 语句覆盖进度条)。

我该怎么做?

最佳答案

您可以通过使用回车符'\r' 来获得此效果。在 Windows 上,这是与换行符 ('\n') 组合以创建新行的字符。在 Unix 系统上,纯换行会自动返回回车,但 '\r' 仍然是一个有效字符。例如,print('hi\rhello') 将打印 'hi',回到行首,打印 'hello',所以只有 'hello' 最终会实际显示。您可以使用 end='' 来抑制 print() 的新行。以下函数演示了该做什么 - 我建议运行它以查看您自己会发生什么,因为输出当然是动态的。

>>> import time, sys
>>> def doit():
...     print('part 1')
...     print(0, end='')
...     sys.stdout.flush()
...     time.sleep(1)
...     print('\rpart 2')
...     print(1)
...
>>> doit()
part 1
part 2
1

关于python - 如何在控制台的最后一行和倒数第二行之间打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30363094/

相关文章:

android - 如何在 Windows 上从 kivy 创建 .apk 文件

python - 如何按一列进行分组并统计其他列中的类别数?

python - python中的Lambda参数函数

python-3.x - 在 CANbus 上接收消息总是返回与 python-can 相同的值

python-3.x - 如何从 python 和我的系统以及命令提示符中删除 nltk

python - pandas:规范化 DataFrame

python - 如何在pandas数据框中使用groupby获取列列表的平均值?

python - 坚持将 ManytoMany 关系与 Modelform 联系起来

python - Python 中省略号的混淆

python - 获取 postgresql 唯一日期的内存有效方式?