python3解释器将长度打印到每个wri的标准输入

2024-10-03 04:34:58 发布

您现在位置:Python中文网/ 问答频道 /正文

关于这种行为有几个问题:

>>> import sys
>>> sys.stdout.write("aaaa")
aaaa4
>>>

我知道那里发生了什么。我不明白的是在我的例子中发生了什么:无论我打开哪个文件,每当我使用它的.write方法时,数据的长度都会被写入控制台/tostdout。在

^{pr2}$

但是,当我让python作为脚本运行它时,不是

D:\>type CON > test.py
with open("garbage.file", "wb") as f:
    f.write(b"xyz")

^Z

D:\>python test.py

D:\>type garbage.file
xyz
D:\>

在Windows命令提示符(“normal”cmd或“Anaconda提示符”)上使用的任何新python3.5解释器都会发生这种情况。在

>>> import sys
>>> sys.version
'3.5.2 |Anaconda 4.1.1 (64-bit)| (default, Jul  5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)]'
>>>

我以前从未见过这种行为,看起来也不应该发生。原因是什么?我怎么解决?在


Tags: pytestimporttypestdoutsysbitanaconda
1条回答
网友
1楼 · 发布于 2024-10-03 04:34:58

这似乎是这个问题的复制品:sys.stdout.write in python3 adds 11 at end of string

这解释了.write()返回写入文件后写入的字符数。这解释了为什么在解释器中看到它,而不是在创建的文件中看到它。在

Edit:显示解释器的示例显示返回值,python可执行文件忽略它们。在

>>> def show(string):
...     print(string)
...     return(len(string))
... 
>>> show('foobar')
foobar
6

现在,如果我创建一个与我得到的内容完全相同的文件:

^{pr2}$

这是因为python可执行文件不显示返回值,而解释器显示返回值。在

相关问题 更多 >