2017-07-11 5 views
2

Je suis en train d'utiliser la fonction suivante:PermissionError: [WinError 32] lorsque vous essayez de supprimer une image temporaire

def image_from_url(url): 
    """ 
    Read an image from a URL. Returns a numpy array with the pixel data. 
    We write the image to a temporary file then read it back. Kinda gross. 
    """ 
    try: 
     f = urllib.request.urlopen(url) 
     _, fname = tempfile.mkstemp() 
     with open(fname, 'wb') as ff: 
      ff.write(f.read()) 
     img = imread(fname) 
     os.remove(fname) 
     return img 
    except urllib.error.URLError as e: 
     print('URL Error: ', e.reason, url) 
    except urllib.error.HTTPError as e: 
     print('HTTP Error: ', e.code, url) 

Mais je continue à obtenir l'erreur suivante:

---> 67   os.remove(fname) 
    68   return img 
    69  except urllib.error.URLError as e: 
    PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\Users\\Nir\\AppData\\Local\\Temp\\tmp8p_pmso5' 

Non D'autres processus sont en cours sur ma machine (pour autant que je sache). Si je laisse de côté la fonction os.remove(fname), alors le code fonctionne bien, mais je ne veux pas que mon dossier temporaire se remplisse d'ordures.

Une idée de ce qui empêche l'image d'être supprimée?

+2

... Avez-vous essayé de le fermer en premier? –

+0

Avez-vous essayé de désactiver votre AV? – kichik

+0

Essayez d'exécuter votre script dans une invite de commande élevée. –

Répondre

0

Avez-vous essayé TemporaryFile() etc? Y at-il une raison particulière pour laquelle vous voulez utiliser mkstemp()? Ce genre de chose pourrait fonctionner

with tempfile.NamedTemporaryFile('wb') as ff: 
    ff.write(f.read()) 
    img = imread(ff.name) 

PS, vous pouvez lire les données d'image en un quelque chose de tableau comme décrit ici How do I read image data from a URL in Python?

import urllib, io 
from PIL import Image 
import numpy as np 

file = io.BytesIO(urllib.request.urlopen(URL).read()) # edit to work on py3 
a = np.array(Image.open(file)) 
+0

Merci l'homme! travaillé comme par magie :) –