为什么 print with end='' 直到换行才出现?
Why does print with end='' doesn't appear until new line?
我一直在用 python 3.9 编写一个程序,在有了这个代码之后:
#Print 3 dots at the interval shown
def dots(t):
t *= 3
sleep(t)
print('.', end='')
sleep(t)
print('.', end='')
sleep(t)
print('.')
这个调用:
# These are completely aesthetic
sleep(0.25)
print("Defining Functions", end='')
dots(0.4)
我希望程序打印 Defining Functions
并在 1.2 秒后打印 3 次,在末尾添加一个点 (.
)。真正发生的事情是在 3.85 秒后它用点 (Defining Functions...
) 打印了整个东西。因此在添加新行(第 3 个点)之前它没有打印任何内容。
不好意思打扰了,我不知道怎么把这些问题弄好
将flush=True
传递给print
def dots(t):
t *= 3
sleep(t)
print('.', end='', flush=True)
sleep(t)
print('.', end='', flush=True)
sleep(t)
print('.', flush=True)
sleep(0.25)
print("Defining Functions", end='', flush=True)
dots(0.4)
你可能会问为什么 print
会这样,对于大多数编程语言来说,打印一些东西并不是一件非常快速和直接的事情,python 正在等待打印所有东西一次以提高效率,但您可以明确告诉它立即刷新您的消息,而无需等待其他打印件。
Python 缓冲输出到标准输出。这是因为一次写入较大的文本片段效率更高(系统调用更少)。
默认情况下,如果 stdout 连接到终端,输出将进行行缓冲。因此打印换行符会刷新缓冲区,您会立即看到输出。
如果 stdout 被重定向到管道或文件中,Python 缓冲会更加积极,并且不会刷新换行符,只有当缓冲区已满时。
为避免此问题,请在休眠前显式刷新缓冲区:
print('.', end='', flush=True)
我一直在用 python 3.9 编写一个程序,在有了这个代码之后:
#Print 3 dots at the interval shown
def dots(t):
t *= 3
sleep(t)
print('.', end='')
sleep(t)
print('.', end='')
sleep(t)
print('.')
这个调用:
# These are completely aesthetic
sleep(0.25)
print("Defining Functions", end='')
dots(0.4)
我希望程序打印 Defining Functions
并在 1.2 秒后打印 3 次,在末尾添加一个点 (.
)。真正发生的事情是在 3.85 秒后它用点 (Defining Functions...
) 打印了整个东西。因此在添加新行(第 3 个点)之前它没有打印任何内容。
不好意思打扰了,我不知道怎么把这些问题弄好
将flush=True
传递给print
def dots(t):
t *= 3
sleep(t)
print('.', end='', flush=True)
sleep(t)
print('.', end='', flush=True)
sleep(t)
print('.', flush=True)
sleep(0.25)
print("Defining Functions", end='', flush=True)
dots(0.4)
你可能会问为什么 print
会这样,对于大多数编程语言来说,打印一些东西并不是一件非常快速和直接的事情,python 正在等待打印所有东西一次以提高效率,但您可以明确告诉它立即刷新您的消息,而无需等待其他打印件。
Python 缓冲输出到标准输出。这是因为一次写入较大的文本片段效率更高(系统调用更少)。
默认情况下,如果 stdout 连接到终端,输出将进行行缓冲。因此打印换行符会刷新缓冲区,您会立即看到输出。 如果 stdout 被重定向到管道或文件中,Python 缓冲会更加积极,并且不会刷新换行符,只有当缓冲区已满时。
为避免此问题,请在休眠前显式刷新缓冲区:
print('.', end='', flush=True)