Выходной формат подпроцесса Python? - PullRequest
0 голосов
/ 19 декабря 2018

Я хотел напечатать системную информацию ОС для Pi в python.Команда ОС "cat / etc / os-release" отлично работает в Терминале с хорошим форматированием строк.

В Python я использовал:

import subprocess

output = subprocess.check_output("cat /etc/os-release", shell=True)
print("Version info: ",output)

Это работает, но я не получаюлюбые новые строки:

Version info:  b'PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"\nNAME="Raspbian GNU/Linux"\nVERSION_ID="9"\nVERSION="9 (stretch)"\nID=raspbian\nID_LIKE=debian\nHOME_URL="http://www.raspbian.org/"\nSUPPORT_URL="http://www.raspbian.org/RaspbianForums"\nBUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"\n'

Как мне отформатировать вывод для добавления новых строк?

1 Ответ

0 голосов
/ 19 декабря 2018

Проблема в том, что ваша строка является строкой байтов, как обозначено в выходных данных буквой b в качестве префикса к строке: Информация о версии: b 'PRETTY_NAME = "RaspbianGNU / Linux ...

Простым решением было бы декодировать строку следующим образом:

import subprocess

output = subprocess.check_output("cat /etc/os-release", shell=True)
output = output.decode("utf-8")
print("Version info: ",output)

И результат будет напечатан правильно. Вы можете убедиться, что это другой объектесли вы напечатаете его тип до и после декодирования:

import subprocess

output = subprocess.check_output("cat /etc/os-release", shell=True)
print(type(output))
output = output.decode("utf-8")
print(type(output))

Это приведет к следующему выводу:

<class 'bytes'>
<class 'str'>
...