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

14 投票
2 回答
39377 浏览
提问于 2025-04-15 18:44

我正在尝试通过以下代码将一些内容传递给一个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 中可能会引发问题。最好是从一开始就把它处理成二进制格式。

撰写回答