在python中有'echo -en ...'的等效功能吗?

时间:2012-11-03 17:24:20

标签: python bash shell echo

  

可能重复:
  Replace console output in python

我正在尝试编写一个程序,输出包括命令行更新的信息。我所说的更新是指,例如,如果程序正在处理文件,它可能会保留到目前为止处理的文件的更新计数。因此1 file替换为2 files,然后替换为3 files,依此类推。

以下是一段代码示例,它会计算出一些文件,然后显示loading bar

#!/bin/bash

for a in {1..10}
do
    echo -ne " $a files processed.\r"
    sleep 1
done
echo ""
echo -ne '#####                     (33%)\r'
sleep 1
echo -ne '#############             (66%)\r'
sleep 1
echo -ne '#######################   (100%)\r'
echo -ne '\n'

基本上,命令行输出会被定期覆盖,从而在终端中产生基于文本的原始动画效果。

这里有两个问题:

  1. 根据我对医生的了解,echo命令根本不可移植。
  2. 我想在python程序中执行此操作,而不是使用bash文件。
  3. 有没有办法使用python实现与此类似的功能?

1 个答案:

答案 0 :(得分:2)

Python中的等效实现是:

import sys, time

for a in range(1,11):
    sys.stdout.write('\r {0} files processed.'.format(a))
    time.sleep(1)

print('')
sys.stdout.write('\r#####                     (33%)')
time.sleep(1)
sys.stdout.write('\r#############             (66%)')
time.sleep(1)
sys.stdout.write('\r#######################   (100%)')
print('')

您需要使用sys.stdout.write,因为print默认添加换行符。如果您正在使用print-function(Python 3,或通过在Python 2中明确导入它),您也可以使用print('text', end='')。或者在Python 2中,您可以使用print-statement的功能来抑制行终止,如下所示:print 'text',