IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

PermissionError: [WinError 32] meme avec fermeture du fichier


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Par défaut PermissionError: [WinError 32] meme avec fermeture du fichier
    Salut,
    Je veux supprimer et recréer mon fichier en laissant le mode a+ a chaque fois pour certaines raisons mais ca ne fonctionne pas alors que je l'ai bien fermé, j'ai meme essaye avec with :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def removeFile(win, bt, file):
        with open('saver.txt', 'a+') as saver:
            saver.seek(0)
            content = saver.readlines()
        content.remove(os.path.abspath(file).replace('\\', '/'))
        newContent = ''
        for k in range(0, len(content)):
            newContent += content[k]
        os.remove('saver.txt')
        saver = open('saver.txt', 'a+')
        saver.seek(0)
        saver.write(newContent)
    Et c'est uniquement a cet endroit que ca bloque, a cause du open parce que ailleurs j'ai une fonction avec un remove et ca fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def clearList(btlist):
        for k in range(0, len(btlist)):
            btlist[k].pack_forget()
    os.remove('saver.txt')
    De plus l'erreur se declanche egalement si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def clearList(btlist):
        for k in range(0, len(btlist)):
            btlist[k].pack_forget()
        saver = open('saver.txt', 'a+')
        saver.seek(0)
        content = saver.readlines()
        saver.close()
        os.remove('saver.txt')
    PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'saver.txt'

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Citation Envoyé par Anonyme1784 Voir le message
    Je veux supprimer et recréer mon fichier en laissant le mode a+ a chaque fois pour certaines raisons mais ca ne fonctionne pas alors que je l'ai bien fermé
    Si Windows dit:
    Citation Envoyé par Anonyme1784 Voir le message
    PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'saver.txt'
    c'est pas pour vous embêter mais c'est parce que le fichier est encore ouvert.

    Après il faut trouver par quoi... mais c'est soit dans le code que vous ne montrez pas ou dans une manip. hasardeuse (oubli d'arrêt d'un programme qui...) ...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Par défaut
    Merci,
    J'ai justement montré le troisième morceau de code pour prouver que cela n'avait pas de sens.

    J'ai une suppression de saver.txt correcte avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def clearList(btlist):
        for k in range(0, len(btlist)):
            btlist[k].pack_forget()
        os.remove('saver.txt')
    Mais quand j'ajoutais ouverture/fermeture ca voulait pas !

    Apres avoir redemarre mon ordi (donc ferme et rouvert python) ca fonctionne... bizarre que ca fonctionnait pas qd mm

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Anonyme1784 Voir le message
    Apres avoir redemarre mon ordi (donc ferme et rouvert python) ca fonctionne... bizarre que ca fonctionnait pas qd mm
    Bonjour

    Vu que tu ne payes pas ta connexion internet à la quantité d'octets envoyés, merci d'écrire les mots en entiers.

    Et vu que maintenant ça fonctionne, ça veut dire qu'il y avait bien un truc qui coinçait avant le reboot. Peut-être un résidu de vieux test toujours instancié... mais quoi qu'il en soit ça n'a rien à voir avec Python.

    Il existe un outil nommé "unlocker" que tu peux télécharger et installer. Ensuite, si un fichier est verrouillé il t'indique par quoi et te permet de le débloquer.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Par défaut
    Merci,
    Citation Envoyé par Sve@r Voir le message
    un truc qui coinçait avant le reboot. Peut-être un résidu de vieux test toujours instancié...
    je ne comprends pas bien, vous ne lisez pas mon code ? J'ai bien indiqué a deux reprises que le .remove() fonctionnait si je ne faisais pas d'ouverture/fermeture juste avant...

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    En fait la particularité, c'est le mode utilisé pour ouvrir et écrire dans le fichier. Il y a donc possibilité, dans le cas où on ne gère pas correctement le processus exécuté, d'avoir plusieurs tâches différentes et incompatibles, comme par exemple, mettre à jour le fichier alors que le même programme écrirait sur ce même fichier. On est bien d'accord que cela n'est pas possible.

    Et puis il y a le cas où ton fichier de données est ouvert, dans ce cas, lors d'une réouverture de ton fichier, ton programme ne s'attend pas à avoir ton fichier de données déjà ouvert. Alors l'autre processus peut verrouiller afin d'éviter les modifications inadéquates.

    La seule solution à ce problème est d'essayer (try-except) et de prévoir le cas où ça n'est pas possible, en créant une boucle de n tentatives qui retente avec un délai la réouverture.

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par Anonyme1784 Voir le message
    je ne comprends pas bien, vous ne lisez pas mon code ? J'ai bien indiqué a deux reprises que le .remove() fonctionnait si je ne faisais pas d'ouverture/fermeture juste avant...
    Quand vous avez un problème comme çà, le plus simple est d'essayer de le reproduire avec l'interpréteur Python:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> f = open(...)
    >>> f.write(...)
    >>> f.close()
    >>> os.remove()
    Et si vous n'arrivez pas à le reproduire simplement, il y a de fortes chances pour que le problème soit liée à votre contexte particulier et la conséquence de ce que vous avez fait par ailleurs sans trop les maîtriser.
    C'est pour çà que programmer demande une certaine rigueur: à défaut de "comprendre", noter ce qu'on a fait pour pouvoir le refaire/reproduire plus tard... ou redémarrer son système quand on ne sait plus ou on en est.


    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Plantage excel à la fermeture du fichier avec macro si autre fichier excel ouvert
    Par Systémicien dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/03/2011, 09h00
  2. Réponses: 0
    Dernier message: 28/05/2009, 18h53
  3. Réponses: 5
    Dernier message: 26/10/2007, 23h45
  4. Réponses: 1
    Dernier message: 06/01/2006, 13h09
  5. [] Datareport.orientation introuvable même avec sp5
    Par khany dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 08/01/2003, 10h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo