gpt4 book ai didi

python - 为什么 Popen.communicate() 返回 b'hi\n' 而不是 'hi' ?

转载 作者:IT老高 更新时间:2023-10-28 20:25:24 24 4
gpt4 key购买 nike

有人能解释一下为什么我想要的结果“hi”前面有一个字母“b”,后面有一个换行符吗?

我正在使用 Python 3.3

>>> import subprocess
>>> print(subprocess.Popen("echo hi", shell=True,
stdout=subprocess.PIPE).communicate()[0])
b'hi\n'

如果我使用 python 2.7 运行它,则不会出现这个额外的“b”

最佳答案

b表示你拥有的是 bytes ,它是字节的二进制序列,而不是 Unicode 字符的字符串。子进程输出字节,而不是字符,这就是 communicate()正在回归。

bytes类型不是直接print()能,所以你会看到reprbytes你有。如果您知道从子进程收到的字节的编码,则可以使用 decode()将它们转换为可打印的 str :

>>> print(b'hi\n'.decode('ascii'))
hi

当然,此特定示例仅在您实际从子进程接收 ASCII 时才有效。如果不是 ASCII,你会得到一个异常:

>>> print(b'\xff'.decode('ascii'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0…

换行符是 echo hi 的一部分有输出。 echo的工作是输出你传递给它的参数,后跟换行符。如果您对进程输出周围的空白不感兴趣,可以使用 strip()像这样:

>>> b'hi\n'.strip()
b'hi'

关于python - 为什么 Popen.communicate() 返回 b'hi\n' 而不是 'hi' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15374211/

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