pythonsubprocess

"can't concat bytes to str" when using subprocess.check_output


What is going on here?

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()

The output file looks like:

test string

and then I get this error:

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

Solution

  • subprocess.check_output() returns a bytestring.

    In Python 3, there's no implicit conversion between unicode (str) objects and bytes objects. If you know the encoding of the output, you can .decode() it to get a string, or you can turn the \n you want to add to bytes with "\n".encode('ascii')