Dav*_*vid 10 python python-3.x
我试图subprocess使用以下行管道输入:
p.communicate("insert into egg values ('egg');");
TypeError: must be bytes or buffer, not str
Run Code Online (Sandbox Code Playgroud)
如何将字符串转换为缓冲区?
Len*_*bro 11
正确答案是:
p.communicate(b"insert into egg values ('egg');");
Run Code Online (Sandbox Code Playgroud)
注意前导b,告诉你它是一串字节,而不是一串unicode字符.另外,如果您从文件中读取此内容:
value = open('thefile', 'rt').read()
p.communicate(value);
Run Code Online (Sandbox Code Playgroud)
改为:
value = open('thefile', 'rb').read()
p.communicate(value);
Run Code Online (Sandbox Code Playgroud)
再次注意'b'.现在,如果你value是一个从一个只返回字符串的API获得的字符串,那么你需要对它进行编码.
p.communicate(value.encode('latin-1');
Run Code Online (Sandbox Code Playgroud)
Latin-1,因为与ASCII不同,它支持所有256个字节.但话说说,在unicode中使用二进制数据会遇到麻烦.如果你能从一开始就把它变成二进制文件,那就更好了.
您可以使用encode方法将其转换为字节:
>>> "insert into egg values ('egg');".encode('ascii') # ascii is just an example
b"insert into egg values ('egg');"
Run Code Online (Sandbox Code Playgroud)