我在Windows 10,64位操作系统的控制台中写了一个简单的sys.stdout.write
语句。
Microsoft Windows [Version 10.0.17134.590]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Users\user>python
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.stdout.write('x')
x1
>>> sys.stdout.write('try')
try3
>>> sys.stdout.write('fooo')
fooo4
安装的Python版本是3.7.2
。
这个数字不是随机的;这是写的字符数。因为您使用的是Python交互式,所以也会打印该语句的返回值。 sys.stdout.write
(或一般写入文件)返回写入的字符数。
因此,当你执行类似sys.stdout.write('fooo')
的操作时,首先打印fooo
,然后打印返回值(4
)。
sys.stdout.write
可以像这样嘲笑:
def mywrite(s):
print(s, end='')
return len(s)
在互动中:
>>> def mywrite(s):
... print(s, end='')
... return len(s)
...
>>> mywrite('x')
x1
>>> mywrite('try')
try3
>>> mywrite('fooo')
fooo4
如果不捕获函数,REPL将始终打印所调用函数的返回值(在您的情况下为STDOUT的写入字符数)。如果您不想打印它,您可以始终使用临时变量将返回值存储在临时/ throaway变量中:
>>> _ = sys.stdout.write('foobar\n')
foobar
>>>
注意最后添加的新行 - 这是因为它不会自动添加,所以没有它你的下一个REPL提示将在foobar
而不是新行之后立即开始。
或者,你知道,你可以使用print()
函数,它在默认设置中几乎完全相同,而不是你必须直接处理STDOUT流。