LINUX.ORG.RU

Почему функция str() возвращает байтовый массив в Python3 ?

 , ,


0

1

Возникла необходимость написать пару скриптов на Python3 (если быть точным, 3.5.3 ибо дистр старенький, но его менять нельзя). До этого Питон щупал когда он был еще 2-й версии.

Есть следующий код:

    p=Popen(cmd, stdout=PIPE, shell=True)

    stdOutData, stdErrData = p.communicate()
    errCode=p.returncode

    print( "Std out data: "+str(stdOutData) )

В результате его работы в консоль выводится:
Std out data: b'/home/x/work/develop/python/lissage/step0000-showUserInfo.py\n'

Вроде как функция str() должна возвращать строку, а она возвращает, судя по выводу, байтовый массив.

Операционная система имеет кодировку UTF-8, файлы тоже в кодировке UTF-8.

Как получить строку в Python3 в этом коде?

★★★★★

Ответ на: комментарий от AlexKiriukha

Ага, по-дефолту можно и проще:

print( "Std out data: "+stdOutData.decode() )


А вот еще вопрос: что нынче используют в Python3 для динамического определения типа переменной и перевода названия типа в строку? Нынче вот такая конструкция:
print( "Type is: "+type(varName) )

Дает ошибку:
TypeError: Can't convert 'type' object to str implicitly

Ищу-ищу, а мне все примеры про Python2 тулят, хотя в запросе пишу Python3.

Xintrea ★★★★★ ()

Вроде как функция str() должна возвращать строку, а она возвращает, судя по выводу, байтовый массив.

Это не байтовый массив, а repr байтового массива, то есть строка вида

"b'bytes'"
grazor ()
Ответ на: комментарий от grazor

Это не байтовый массив, а repr байтового массива, то есть строка вида

Да, я это понял пока игрался.

Xintrea ★★★★★ ()
Ответ на: комментарий от Xintrea

TypeError: Can’t convert ‘type’ object to str implicitly

Потому что type возвращает тип, а не строку с названием типа. Тебе нужно что-нибудь вроде str(type(x)). Или в ipython посмотреть

MrClon ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.