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

问题描述 投票:3回答:2

我在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 cmd stdout python-3.7
2个回答
7
投票

这个数字不是随机的;这是写的字符数。因为您使用的是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

0
投票

如果不捕获函数,REPL将始终打印所调用函数的返回值(在您的情况下为STDOUT的写入字符数)。如果您不想打印它,您可以始终使用临时变量将返回值存储在临时/ throaway变量中:

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

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

或者,你知道,你可以使用print()函数,它在默认设置中几乎完全相同,而不是你必须直接处理STDOUT流。

© www.soinside.com 2019 - 2024. All rights reserved.