如何在Python 3.1中将字符串转换为缓冲区?

时间:2010-02-01 12:17:21

标签: python python-3.x

我正在尝试使用以下行将某些内容传递给subprocess

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

TypeError: must be bytes or buffer, not str

如何将字符串转换为缓冲区?

2 个答案:

答案 0 :(得分:11)

正确答案是:

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

注意前导b,告诉你它是一串字节,而不是一串unicode字符。此外,如果您从文件中读取此内容:

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中使用二进制数据会遇到麻烦。如果你能从一开始就把它变成二进制文件,那就更好了。

答案 1 :(得分:5)

您可以使用encode方法将其转换为字节:

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