Почему я получаю b в начале каждой строки и в конце каждой строки? - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть этот скрипт Python, который использует pxssh. Вот сценарий:

from pexpect import pxssh
import getpass
try:
    s = pxssh.pxssh()
    hostname = input('hostname: ')
    username = input('username: ')
    password = getpass.getpass('password: ')
    s.login(hostname, username, password)
    s.sendline('cat hiera/my.yaml')   # run a command
    s.prompt()             # match the prompt
    for line in s.before.splitlines()[1:]:
       print (line)
    s.logout()
except pxssh.ExceptionPxssh as e:
    print("pxssh failed on login.")
    print(e)

и я не могу понять, почему вывод скрипта выглядит так:

b'---'
b'settings_prod: |'
b'"""'
b"Generated by 'django-admin startproject' using Django 2.0.5."
b''
b'For more information on this file, see'
b'https://docs.djangoproject.com/en/2.0/topics/settings/'
b''
b'For the full list of settings and their values, see'
b'https://docs.djangoproject.com/en/2.0/ref/settings/'
b'"""'

Что происходит с b' в начале каждой строки и ' в конце каждой строки вывода? Как мне избавиться, если это?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Это двоичные данные, их нужно преобразовать в str().

print( str( line, 'utf-8' ) )

Существует множество других форматов строк, таких как iso-8859-1, iso-8859-16 и т. Д. Но, если сомневаетесь, сначала попробуйте utf-8.

0 голосов
/ 07 ноября 2018

Из документов:

Байтовые литералы всегда начинаются с префикса 'b' или 'B'; они производят экземпляр типа байтов вместо типа str. Они могут только содержать символы ASCII; байты с числовым значением 128 или больше должен быть выражен с помощью Escape

https://docs.python.org/3.3/reference/lexical_analysis.html#string-literals

...