我正在尝试使用以下行将某些内容传递给subprocess
:
p.communicate("insert into egg values ('egg');");
TypeError: must be bytes or buffer, not str
如何将字符串转换为缓冲区?
答案 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');"