繁体   English   中英

执行 print("Enter text: ", end="") sys.stdin.readline() 在 Python-3 中无法正常工作

[英]Doing print("Enter text: ", end="") sys.stdin.readline() does not work properly in Python-3

当我这样做时发生了一些奇怪的事情

import sys

print("Enter text: ", end="")
sys.stdin.readline()

Output:

<input>
Enter text: 

(这里, <input> (不包括引号表示输入发生在该行))

为什么代码运行起来好像我的代码是

import sys

sys.stdin.readline()
print("Enter text: ", end="")

(Debian/Ubuntu, Python-3.8.10)

有什么理由吗?

我认为,在您输入输入之前,该stdout尚未刷新。

尝试这个

import sys

print("Enter text: ", end="")
sys.stdout.flush()
sys.stdin.readline()
> Enter text: 123

什么时候被冲

这个答案解释了刷新为换行符的原因:

通常 output 到文件或控制台被缓冲,文本 output 至少打印换行符之前。 刷新确保缓冲的任何 output 都到达目的地。

为什么这个打印不冲洗

在您的语句print("Enter text: ", end="")中,您既不强制刷新,也不打印换行符 - 而是覆盖了end参数(默认为\n换行符)。 因此,指定的文本仅打印到缓冲区,尚未刷新到控制台。

如何强制冲洗

内置 function print()有一个名为flush的参数,默认为False

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

[..] output 是否缓冲通常由文件决定,但如果flush关键字参数为真,则stream被强制刷新。

也可以看看

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM