为什么在控制台中写入 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。
我刚刚在 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。