¿Cómo convierto una cadena a un búfer en Python 3.1?

Estoy intentando canalizar algo a un subprocess utilizando la siguiente línea:

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

¿Cómo puedo convertir la cadena a un búfer?

La respuesta correcta es:

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

Fíjese en la b inicial, que le dice que es una cadena de bytes, no una cadena de caracteres Unicode. Además, si estás leyendo esto desde un archivo:

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

El cambio que a:

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

Una vez más, tenga en cuenta la ‘b’. Ahora, si su value es una cadena que obtiene de una API que solo devuelve cadenas sin importar qué, entonces necesita codificarla.

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

Latin-1, porque a diferencia de ASCII soporta todos los 256 bytes. Pero dicho esto, tener datos binarios en Unicode es un problema. Es mejor si puedes hacerlo binario desde el principio.

Puedes convertirlo a bytes con el método de encode :

 >>> "insert into egg values ('egg');".encode('ascii') # ascii is just an example b"insert into egg values ('egg');"