gpt4 book ai didi

python - 为什么 `print foo.communicate()[0]` 与 `print foo.communicate()` 不同“

转载 作者:太空宇宙 更新时间:2023-11-04 09:21:02 28 4
gpt4 key购买 nike

情况是这样的:

我有一个正在运行的命令:

import subprocess
foo = subprocess.Popen('ls /', shell=True, stdout=subprocess.PIPE,\
stderr=subprocess.STDOUT)

非常基本,对吧?而且我发现我可以用 .communicate() 对输出做一些事情,就像这样:

print foo.communicate()

效果很好并产生了 subprocess.communicate 文档建议的输出,一个元组:

('bin\nboot\ncdrom\n[...stuff redacted for brevity...]tmp\nusr\nvar\nvmlinuz\n', None)

注意那里的 \n 换行符。而且我发现只要请求元组的第一个元素就会产生带有换行符的输出,如下所示:

>>> print foo.communicate()[0]
bin
boot
cdrom
[...stuff redacted for brevity...]
tmp
usr
var
vmlinuz

但我不明白的是为什么只用第一个元素打印会产生换行符。不要误会我的意思,它很棒,我很高兴我可以不用循环就可以做到,但我想了解发生了什么。

提前致谢

--杰德

最佳答案

在 Python 中,当您调用类似 print obj 的方法时,您实际上是在对象上调用 __str__,然后将结果解释为字符串。

例如假设您有:

      >>> a = ('foo\nbar', '5')
>>> print a
('foo\nbar', '5')

如您所见。但是,如果您执行以下操作:

      >>> class mytuple(tuple):
def __str__(self):
return ''.join(self)
>>> b = mytuple(a)
>>> print b
foo
bar5

元组类型的这个子类超越了标准 __str__ 并构建了一个由其组成部分的字符串表示组成的字符串。

在一般情况下不这样做的原因是您永远不知道可以将哪些对象插入到元组或列表中 - 并非所有对象都具有可字符串表示。

关于python - 为什么 `print foo.communicate()[0]` 与 `print foo.communicate()` 不同“,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2596261/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com