Python 2.7 水平打印命令行进度条

Python 2.7 水平打印命令行进度条,python-2.7,console-output,Python 2.7,Console Output,请注意,这里输出中的“*”以2秒的间隔一个接一个地打印在屏幕上(这正是我想要的),我需要在一些其他代码中将其用作进度条 我使用了print“*”, 但是,输出是水平的,但在程序执行后会立即打印所有内容 * * * * * done 使用end关键字会出现此错误 >>>* * * * * done Python版本是Python 2.7.5 我无法在此prod机器上升级Python,需要处理现有版本以获得所需的输出 因此,考虑到上述情况,可以不使用新行打印,而是以2秒的间

请注意,这里输出中的“*”以2秒的间隔一个接一个地打印在屏幕上(这正是我想要的),我需要在一些其他代码中将其用作进度条

  • 我使用了
    print“*”,
    但是,输出是水平的,但在程序执行后会立即打印所有内容

    *
    *
    *
    *
    *
    done
    
  • 使用
    end
    关键字会出现此错误

    >>>* * * * * done
    
  • Python版本是Python 2.7.5

    我无法在此prod机器上升级Python,需要处理现有版本以获得所需的输出


    因此,考虑到上述情况,可以不使用新行打印,而是以2秒的间隔逐个水平打印吗?

    Python2的
    print
    语句不如Python3的函数灵活

    如果使用Python 3,只需指定结束字符以及是否立即刷新缓冲区,如下所示:

    File "progress_1_.py", line 11
     print ("*",end = '')
                        ^
    SyntaxError: invalid syntax
    
    但是,在使用Python 2时,不能使用
    print
    语句,而必须直接访问输出流对象:

    print("*", end="", flush=True)
    

    这将迫使Python在完成一行之前不缓存打印数据,而是通过刷新缓冲区立即显示数据。

    您可以使用
    Python-u跳过整个Python进程的缓冲

    或者,当您需要使用Python2时,您还可以使用其他类似流的包装器来替换
    sys.stdout
    ,该包装器在每次调用后都进行刷新

    类无缓冲(对象):
    定义初始化(自,流):
    self.stream=流
    def写入(自身、数据):
    self.stream.write(数据)
    self.stream.flush()
    def _ugetattr _;(self,attr):
    返回getattr(self.stream,attr)
    导入时间
    导入系统
    sys.stdout=无缓冲(sys.stdout)
    打印“*”,
    时间。睡眠(2)
    打印“*”
    
    这里有一个简单的答案:

    import sys
    def progress_print(character="*"):
         sys.stdout.write(character)
         sys.stdout.flush()
    
    #/usr/bin/python
    导入系统
    导入时间
    def等待(n):
    时间计数器=0
    尽管如此:
    时间计数器+=1
    
    如果time\u counter您应该在本地安装2.x,这样您就可以编写和测试在prod中实际工作的代码,但是请注意,您可以从uuu future\uuuu导入打印功能
    @chetan中执行
    ,我尝试了您的代码,如下所示,它可以正常工作。我使用的代码是:import time count=5 temp=True,而temp:if count<1:print“done”,temp=False否则:print“*”,time.sleep(2)count-=1然而,我在print“*”中添加了一个逗号。不要忘记通过单击左边的灰色复选符号来接受对您帮助最大的答案。这标志着你的问题已经解决,并奖励回答者几分。谢谢请以Python脚本的形式运行代码,在打印“*”后加逗号,这应该可以解决问题。
    
    import sys
    def progress_print(character="*"):
         sys.stdout.write(character)
         sys.stdout.flush()
    
    #!/usr/bin/python
    
    import sys
    import time
    
    def wait(n):
        time_counter = 0
        while True:
            time_counter += 1
            if time_counter <= n:
                time.sleep(1)
                sys.stdout.write("*")
                sys.stdout.flush()
            else:
                break
        sys.stdout.write("\n")
    wait(10)
    
    Output:
    
    **********