试图按照本教程制作一个wsgi服务器Let's Build a Web Server. 但是在python 3.5.2中使用下面的代码获取错误TypeError: initial_value must be str or None, not bytes
。在Python 3.5.2中输入错误
import io
env['wsgi.input'] = io.StringIO(self.request_data)
我该如何解决这个问题。提前致谢。
试图按照本教程制作一个wsgi服务器Let's Build a Web Server. 但是在python 3.5.2中使用下面的代码获取错误TypeError: initial_value must be str or None, not bytes
。在Python 3.5.2中输入错误
import io
env['wsgi.input'] = io.StringIO(self.request_data)
我该如何解决这个问题。提前致谢。
变化import StringIO
到import io
变化request_line=request_line.rstrip('\r\n')
到request_line=request_line.rstrip(b'\r\n')
变化env['wsgi.input']=StringIO.StringIO(self.request_data)
到env['wsgi.input'] = io.BytesIO(self.request_data)
变化self.client_connection.sendall(response)
到self.client_connection.sendall(response.encode())
希望现在工作得很好。
首先,该教程使用python2,所以你可以,如果你想直接将其应用到python3
根据PEP3333(更新python3 WSGI规范)遇到其他问题的wsgi.input
environ variable应该是一个字节流,而不是文本流,因此您应该使用io.BytesIO()
,而不是io.StringIO
。
您目前收到的错误是因为您的self.request_data
是bytes
,但是io.StringIO()
要求其参数为str
。