Невозможно сконфигурировать байты для str

Это оказывается грубым переходом на 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

Ответ 1

subprocess.check_output() возвращает bytestring.

В Python 3 нет никакого неявного преобразования между объектами unicode (str) и объектами bytes. Если вы знаете кодировку вывода, вы можете .decode() получить его, или вы можете включить \n, который хотите добавить в bytes, с помощью "\n".encode('ascii')

Ответ 2

subprocess.check_output() возвращает байты.

поэтому вам нужно также преобразовать '\n' в байты:

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

надеюсь, что это поможет

Ответ 3

Вы можете преобразовать тип plaintext в строку:

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