如何在循环中显示“动态”消息? 例如:
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风格的消息?
答案 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!")