Как мне преобразовать строку в буфер в Python 3.1? - PullRequest
10 голосов
/ 01 февраля 2010

Я пытаюсь передать что-то в subprocess, используя следующую строку:

p.communicate("insert into egg values ('egg');");

TypeError: must be bytes or buffer, not str

Как я могу преобразовать строку в буфер?

Ответы [ 2 ]

11 голосов
/ 01 февраля 2010

Правильный ответ:

p.communicate(b"insert into egg values ('egg');");

Обратите внимание на начальную букву b, говорящую, что это строка байтов, а не строка символов Юникода. Кроме того, если вы читаете это из файла:

value = open('thefile', 'rt').read()
p.communicate(value);

Изменение это на:

value = open('thefile', 'rb').read()
p.communicate(value);

Снова отметьте «b». Теперь, если ваш value является строкой, которую вы получаете от API, который возвращает только строки независимо от того, что , тогда вам необходимо его кодировать.

p.communicate(value.encode('latin-1');

Latin-1, потому что в отличие от ASCII он поддерживает все 256 байтов. Но, тем не менее, наличие двоичных данных в Unicode вызывает проблемы. Лучше, если вы сможете сделать это двоичным с самого начала.

5 голосов
/ 01 февраля 2010

Вы можете преобразовать его в байты с помощью encode метода:

>>> "insert into egg values ('egg');".encode('ascii')    # ascii is just an example
b"insert into egg values ('egg');"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...