为什么在控制台中写入 stdout 会附加写入的字符数,在 Python 3 中?

Why does writing to stdout in console append the number of characters written, in Python 3?

我刚刚在 Python 控制台中使用 sys.stdout.write() 时,我注意到这会产生一些奇怪的输出。

对于每个 write() 调用写入的字符数,传递给函数的字符数分别附加到控制台的输出中。

>>> sys.stdout.write('foo bar') 例如导致 foo bar7 正在打印。

即使传递空字符串也会导致输出 0

这实际上只发生在 Python 控制台中,但在执行具有相同语句的文件时不会发生。更有趣的是,它只发生在 Python 3,而不是 Python 2。

虽然这对我来说不是真正的问题,因为它只发生在控制台中,但我真的很想知道为什么它会这样。

我的 Python 版本是 Ubuntu 15.10 下的 3.5.1。

除了写出给定的字符串,write 还将 return 字符数(实际上是字节数,尝试 sys.stdout.write('へllö'))作为 python 控制台打印每个表达式的 return 值到 stdout,return 值附加到实际打印值。

因为write没有附加任何换行符,所以看起来是同一个字符串。

您可以使用包含以下内容的脚本验证这一点:

#!/usr/bin/python
import sys

ret = sys.stdout.write("Greetings, human!\n")
print("return value: <{}>".format(ret))

此脚本执行时应输出:

Greetings, human!
return value: <18>

文档中提到了此行为 here