Как преобразовать строку в буфер в Python 3.1?

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

 p.communicate("insert into egg values ('egg');"); TypeError: must be bytes or buffer, not str 

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

2 Solutions collect form web for “Как преобразовать строку в буфер в Python 3.1?”

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

 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 запрашивают проблемы. Лучше, если вы сможете сделать его двоичным с самого начала.

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

 >>> "insert into egg values ('egg');".encode('ascii') # ascii is just an example b"insert into egg values ('egg');" 
Python - лучший язык программирования в мире.