【问题标题】:Why doesn't python3's print statement flush output when end keyword is specified?为什么指定 end 关键字时 python3 的 print 语句不刷新输出?
【发布时间】:2018-08-11 10:11:52
【问题描述】:
from sys import argv, stdout as cout
from time import sleep as sl
print("Rewinding.......",end = '') # If end is given output isn't flushed. But why?
cout.flush()
for i in range(0,20):
    sl(0.2)
    print(".",end='',flush = True) #No output is printed if flush wasn't specified as true.

print("Done") #Output is by default flushed here

当我指定结束和睡眠时,我注意到输出直到下一次打印才被刷新,默认情况下它被刷新。

为什么会这样?我不得不手动刷新输出。

【问题讨论】:

    标签: python python-3.x stdout flush


    【解决方案1】:

    事实上,这是底层stdio 函数的默认行为。

    当输出到控制台时,当遇到换行符时会自动刷新流,但不会刷新其他字符。

    如果输出不是控制台,那么即使换行也不会触发刷新。

    如果你想确定flush,你可以明确告诉print()

    print("Rewinding.......",end = '',flush=True)
    

    【讨论】:

    • "当输出到控制台时,遇到换行符时会自动刷新流,但不会刷新其他字符。"这我不知道。这种行为是特定于 Python 还是特定于任何编程语言。
    • 我的意思是说std::endl 也会刷新输出,但 '\n' 在我知道的 C++ 中没有。这是否意味着它是标准输出接收端的软件/功能[底层系统]的功能?
    • 这是C语言stdio.h函数的特点。通过unistd.h函数isatty(3)检查是否是控制台
    • 是的,特定于语言/库。
    • 他们使用stdio 你可以阅读他们的源代码。但这些确实是实施细节,没有记录。了解此级别详细信息的唯一方法是阅读源代码。当然 Python 可以添加一些额外的东西,你不能简单地假设它们完全相同相同。
    猜你喜欢
    • 1970-01-01
    • 2022-06-13
    • 2016-04-13
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多