Skip to main content

Use text=true with subprocess functions to get stdout/stderr as str, not bytes

  • Tagged with python
  • Posted

I often use the subprocess module to capture the output of external processes in Python, for example:

>>> import subprocess
>>> subprocess.check_output(["echo", "hello world"])
b'hello world\n'

This returns the output as bytes, and so I usually have to decode the output to get a str. (And I can never remember whether I need to encode/decode when converting bytes to str, so I get it wrong half the time.)

I recently discovered I can pass text=true to subprocess functions, and it does the work of decoding the output for me. For example:

>>> subprocess.check_output(["echo", "hello world"], text=True)
'hello world\n'

It’s a small thing, but it’ll make all my scripts that use subprocess a bit easier to follow.

(I discovered this option when I learnt that you can iterate over subprocess output line-by-line.)