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

时间:2016-05-05 09:46:28

标签: python python-3.x stdout sys

当我注意到这会产生一些奇怪的输出时,我只是在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。

1 个答案:

答案 0 :(得分:9)

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

因为write没有附加任何换行符,所以它看起来像是相同的字符串。

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

#!/usr/bin/python
import sys

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

此脚本应在执行时输出:

Greetings, human!
return value: <18>

文档here中提到了此行为。