Windows CMD 在打印行末尾添加一个随机数 sys.stdout of python

Windows CMD adds a random number at the end of the printed line with sys.stdout of python

我在 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 交互中,所以也会打印语句的 return 值。 sys.stdout.write(或一般写入文件)returns 写入的字符数。

因此,当您执行类似 sys.stdout.write('fooo') 的操作时,它首先打印 fooo,然后打印 return 值 (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 将始终打印调用函数的 return 值(在您的情况下写入 STDOUT 的字符数),如果您不捕获它的话。如果您不想打印它,您可以随时使用临时变量将 return 值存储在 temporary/throaway 变量中:

>>> _ = sys.stdout.write('foobar\n')
foobar
>>>

注意最后添加的新行 - 这是因为它不会自动添加,所以如果没有它,您的下一个 REPL 提示将在 foobar 而不是新行之后开始。

或者,您知道,您可以只使用 print() 函数,在其默认设置中,该函数将执行几乎相同的操作,而不必直接处理 STDOUT 流。