Как преобразовать строку в буфер в 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 CGI - UTF-8 не работает
  • вход на веб-сайт с использованием запросов
  • Установите и сделайте работу tkinter над экземпляром AWS EC2
  • django.db.utils.OperationalError независимо от того, что я пытаюсь
  • Переименование файла, загруженного с помощью запросов Python
  • Установленный скрипт Python не может импортировать модули пакета
  • Подготовка к конвертации из Python 2.x в 3.x
  • Переключение с 64-битного python.exe на 32bit в среднем исполнении
  • Python - лучший язык программирования в мире.