Python 2.7 水平打印命令行进度条
请注意,这里输出中的“*”以2秒的间隔一个接一个地打印在屏幕上(这正是我想要的),我需要在一些其他代码中将其用作进度条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秒的间
print“*”,
但是,输出是水平的,但在程序执行后会立即打印所有内容
*
*
*
*
*
done
end
关键字会出现此错误
>>>* * * * * done
因此,考虑到上述情况,可以不使用新行打印,而是以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:
**********