【问题标题】:Is there equivalent functionality for 'echo -en ...' in python? [duplicate]python中的'echo -en ...'是否有等效的功能? [复制]
【发布时间】:2012-11-03 17:24:20
【问题描述】:

可能重复:
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 文件。

有没有办法使用python实现类似的功能?

【问题讨论】:

    标签: python bash shell echo


    【解决方案1】:

    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 默认会添加一个换行符。如果您正在使用打印功能(Python 3,或通过在 Python 2 中显式导入它),您也可以使用print('text', end='')。或者在 Python 2 中,您可以使用 print-statement 的功能来抑制行终止,如下所示:print 'text',

    【讨论】:

    • 或者你也可以print "x", 换行
    • 在python2.x中,你也可以通过print "string",抑制换行(注意后面的逗号)
    • \r 是什么原因导致文本以这种方式显示?
    • @Eric 我的代码虽然兼容 Python 2 和 3。但我将为 Python 2 添加该注释。
    • @JonClements 如果控制台缓冲过多,您可以在每次写入后添加sys.stdout.flush()。请注意,即使您使用 print 没有行尾,您也必须这样做。因此,如果这是每个人的问题,使用 print 不会让您免于导入 sys 并以较低的级别访问输出。
    猜你喜欢
    • 2014-08-01
    • 2020-09-07
    • 2021-07-20
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多