How do I get rid of b' if I want to parse a bash output using python?

Question:

At my python application I’m doing the following to get some values from a larger JSON

ffgrading_json = exec_command(f'{options["path_ffprobe"]} -loglevel quiet -print_format json -read_intervals "%+#2" -select_streams v:0 -show_entries side_data "{path}" | egrep -m 1 -A 10 "Mastering display metadata" | grep -v "Mastering display metadata"|tr -d "[:space:]"| tr -d "n"')

on the bash console, the raw command returns the following:

"red_x":"34000/50000","red_y":"16000/50000","green_x":"13250/50000","green_y":"34500/50000","blue_x":"7500/50000","blue_y":"3000/50000","white_point_x":"15635/50000","white_point_y":"16450/50000","min_luminance":"50/10000","max_luminance":"40000000/10000"

But if I write the output to a file using python like so:

with open('/tmp/grading.json', 'w') as f:
                f.write(str(ffgrading_json))

The following will get written:
b'"red_x":"34000/50000","red_y":"16000/50000","green_x":"13250/50000","green_y":"34500/50000","blue_x":"7500/50000","blue_y":"3000/50000","white_point_x":"15635/50000","white_point_y":"16450/50000","min_luminance":"50/10000","max_luminance":"40000000/10000"'

Not sure how important it is but this is my exec_command function:

def exec_command(string):
    """
    Shell command interface
    Returns returnCode, stdout, stderr
    """
    log('DEBUG', f'[Command] {string}')
    output = run(string, shell=True, check=True, capture_output=True)
    return output.returncode, output.stdout, output.stderr

The question now is, how can I get rid of b' and where does it come from ???

Asked By: Asav Mali

||

Answers:

you need to use .decode() on the output.stdout the output is in bytes so this will convert it to a string

when you print bytes python tries to convert what it can into ascii characters but it will display b'' around the printed data to indicate that the variable you printed contains bytes and it is not a string

Answered By: Omer Dagry
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.