Python将消息打印成循环?

时间:2016-08-07 02:34:46

标签: python

如何在循环中显示“动态”消息? 例如:

for item in array:
print (item + " > Cheking file", end=" ")
#Conditions which takes some time. Create a zip file or smth else..
   if (some condition):
      print ("> Creating archive", end=" ")
#Another conditions which takes some time.
   if (some condition):
      print ("> Done!")

我认为结果必须是:

FILENAME > Checking file ... *tick tock* ... > Creating archive ... *tick tock* ... > Done!

但该线路在每个循环周期后完全出现。 如何显示CMD风格的消息?

2 个答案:

答案 0 :(得分:1)

这是由于输出流的缓冲。您可以在每次写入后使用flush选项将流刷新到print()

for item in 'a', 'b', 'c':
    print (item + " > Cheking file", end=" ", flush=True)
   if (some condition):
      print ("> Creating archive", end=" ", flush=True)
   if (some condition):
      print ("> Done!")

最后一次打印没有必要(虽然它不会受到伤害),因为它会打印一条新行,用于刷新输出。

另请注意,您需要在每次迭代结束时打印一个新行。考虑到您有条件地打印,最终打印可能实际上不会发生,因此在所有打印中使用end=' '是个好主意,然后在每次迭代结束时打印一个新行:

for item in 'a', 'b', 'c':
    print (item + " > Cheking file", end=" ", flush=True)
   if (some condition):
      print ("> Creating archive", end=" ", flush=True)
   if (some condition):
      print ("> Done!", end=' ')
   print()

现在,如果由于某种原因最终条件不是True,则仍然会打印一个新行。

答案 1 :(得分:1)

直到最后print之后才显示消息的问题可能是由于缓冲造成的。默认情况下,Python的标准输出流是行缓冲的,因此在其中一行中包含换行符之前,您将看不到打印的文本(例如,未设置end参数时)。

您可以通过在设置flush=True的通话中传递end来解决缓冲问题。这将告诉Python刷新缓冲区,即使没有写入换行符。

所以试试:

for item in array:
    print(item + " > Cheking file", end=" ", flush=True)
    #Conditions which takes some time. Create a zip file or smth else..
    if some_condition:
        print("> Creating archive", end=" ", flush=True)
    #Another conditions which takes some time.
    if some_other_condition:
        print("> Done!")