如何在Python 3.1中将字符串转换为缓冲区?
我正在尝试通过以下代码将一些内容传递给一个subprocess
(子进程):
p.communicate("insert into egg values ('egg');");
TypeError: must be bytes or buffer, not str
我该如何把这个字符串转换成一个缓冲区呢?
2 个回答
7
你可以使用 encode
方法把它转换成字节(bytes)。
>>> "insert into egg values ('egg');".encode('ascii') # ascii is just an example
b"insert into egg values ('egg');"
12
正确的答案是:
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 获取的字符串,而这个 API 无论如何只返回字符串,那么你就需要对它进行编码。
p.communicate(value.encode('latin-1');
使用 Latin-1,因为它支持所有 256 个字节,而不像 ASCII 只支持其中的一部分。不过,值得注意的是,把二进制数据放在 Unicode 中可能会引发问题。最好是从一开始就把它处理成二进制格式。