无法将字节连接到str

时间:2014-02-20 18:50:15

标签: python

这被证明是对python的粗略过渡。这是怎么回事?:

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

4 个答案:

答案 0 :(得分:22)

subprocess.check_output()返回一个bytestring。

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

答案 1 :(得分:9)

subprocess.check_output()返回字节。

因此您还需要将'\ n'转换为字节:

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

希望这会有所帮助

答案 2 :(得分:1)

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

答案 3 :(得分:0)

您可以将plaintext的类型转换为字符串:

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