使用 subprocess.check_output 时“无法将字节连接到 str”

问题描述 投票:0回答:5

这是怎么回事?

f = open('myfile', 'a+')
f.write('test string' + '\n')

key = "pass:hello"
plaintext = subprocess.check_output(['openssl', 'aes-128-cbc', '-d', '-in', test, '-base64', '-pass', key])
print(plaintext)

f.write(plaintext + '\n')
f.close()

输出文件如下所示:

test string

然后我收到此错误:

b'decryption successful\n'
Traceback (most recent call last):
  File ".../Project.py", line 36, in <module>
    f.write(plaintext + '\n')
TypeError: can't concat bytes to str
python subprocess
5个回答
49
投票

subprocess.check_output()
返回一个字节串。

在 Python 3 中,unicode (

str
) 对象和
bytes
对象之间没有隐式转换。如果您知道输出的编码,您可以
.decode()
来获取字符串,或者您可以将要添加到
\n
bytes
"\n".encode('ascii')


15
投票

subprocess.check_output() 返回字节。

所以你需要转换' ' 也转换为字节:

 f.write (plaintext + b'\n')

希望这有帮助


2
投票

您可以将

plaintext
的类型转换为字符串:

f.write(str(plaintext) + '\n')

1
投票
f.write(plaintext)
f.write("\n".encode("utf-8"))

-1
投票

输出 = result.stdout.decode('utf-8') + ' ' + result.stderr.decode('utf-8') print('编译成功')

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