2016-06-01 2 views
2

J'essaye de créer un serveur HTTP en Python3. Pour le début, je veux seulement un serveur qui sert un seul fichier JPG. Voici mon code:Servir des fichiers JPG via wsgiref.simple_server en Python 3 - "L'argument write() doit être une instance d'octets"

from wsgiref.simple_server import make_server 

def simple_app(environ, start_response): 
    headers = [('Content-type', 'image/jpeg')] 
    start_response('200 OK', headers) 
    data = b'' 
    filename = r'sunset-at-dusk.jpg' 
    with open(filename, 'rb', buffering=0) as f: 
     data = f.readall() 
    print(type(data))  #<class 'bytes'> 
    return data 

httpd = make_server('', 8001, simple_app) 
print("Serving on port 8001...") 
httpd.serve_forever() 

Lorsque j'essaie d'accéder au serveur via HTTP, j'obtiens l'erreur suivante.

127.0.0.1 - - [01/Jun/2016 08:37:43] "GET/HTTP/1.1" 200 0 Traceback (most recent call last): File "C:\Anaconda3\lib\wsgiref\handlers.py", line 138, in run 
    self.finish_response() File "C:\Anaconda3\lib\wsgiref\handlers.py", line 180, in finish_response 
    self.write(data) File "C:\Anaconda3\lib\wsgiref\handlers.py", line 266, in write 
    "write() argument must be a bytes instance" AssertionError: write() argument must be a bytes instance 

'coucher de soleil à-dusk.jpg' est un fichier JPG valide dans le même dossier que mon script.

Qu'est-ce que je fais mal?

Répondre

3

Retourner les données sous forme de liste

return [data] 
+0

Merci. Chose simple mais facile à oublier. – JustAC0der