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 :

Ouverture en lecture exclusive [Python 2.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Musicienne
    Inscrit en
    Février 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Portugal

    Informations professionnelles :
    Activité : Musicienne

    Informations forums :
    Inscription : Février 2019
    Messages : 22
    Par défaut Ouverture en lecture exclusive
    Bonjour,
    Mon problème est peut-être simple mais je n'ai pas trouvé la réponse après un long temps de recherche.
    Je cherche à ouvrir un fichier en LECTURE et pendant qu'il est ouvert, qu'aucun autre process puisse y accéder en lecture (et encore moins en écriture) avant qu'il ne soit fermé par le premier programme qui le lit. C'est navrant.

    Suis-je une tarte ?
    Quelle que soit la réponse à cette deuxième question, merci pour votre éclairage de ma faible lanterne.

    Syb'

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Citation Envoyé par SybelleDeNuit Voir le message
    Quelle que soit la réponse à cette deuxième question, merci pour votre éclairage de ma faible lanterne.
    Un fichier est un objet système.
    Pour en verrouiller l'accès, il faut utiliser des méthodes systèmes.

    Pour Linux, il y a la fonction fnctl.flock, pour windows ce sera msvcrt.locking.
    Et vous avez aussi des bibliothèques externes qui cachent tout çà dans des fonctions indépendantes de la plateforme comme py-filelock.

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

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Un fichier est un objet système.
    Pour en verrouiller l'accès, il faut utiliser des méthodes systèmes.

    Pour Linux, il y a la fonction fnctl.flock, pour windows ce sera msvcrt.locking.
    Et vous avez aussi des bibliothèques externes qui cachent tout çà dans des fonctions indépendantes de la plateforme comme py-filelock.

    - W
    Oooh! J'ai cherché longtemps aussi et Google ne m'a jamais parlé de ça !
    edit : Euh Wiz msvcrt.locking empêche aussi la lecture ? J'ai fais des tests à partir de ça : https://effbot.org/librarybook/msvcr...t-example-3.py et j'ai pas l'impression que c'est ce mode de fonctionnement que souhaite SybelleDeNuit ???

    Sybelle tu veux vraiment bloquer l'accès aux fichiers c'est ça ?

    Moi je propose un truc plus "bizarre", en changeant les permissions du propriétaire, je ne sais pas si ça bloquera ton fichier pour d'autres process mais ça t'empêchera de l'ouvrir avec un autre logiciel...
    Edit : En tout cas si tu fais un os.remove(fichier), ben le fichier disparaît totalement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    import win32security as w32
    import ntsecuritycon as con
    import getpass
     
    def access_rights_win(path,unauthorized):
     
        w_user, _, _ = w32.LookupAccountName("", getpass.getuser())
     
        sd = w32.GetFileSecurity(path, w32.DACL_SECURITY_INFORMATION)
        dacl = sd.GetSecurityDescriptorDacl()
        if unauthorized:
            dacl.AddAccessDeniedAce(w32.ACL_REVISION, con.FILE_ALL_ACCESS, w_user)
        else:
            dacl.DeleteAce(0)
            dacl.AddAccessAllowedAce(w32.ACL_REVISION, con.GENERIC_ALL, w_user)
     
        sd.SetSecurityDescriptorDacl(1, dacl, 0)
        w32.SetFileSecurity(path, w32.DACL_SECURITY_INFORMATION, sd)
    Dernière modification par Invité ; 03/07/2020 à 23h28.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Citation Envoyé par LeNarvalo Voir le message
    Oooh! J'ai cherché longtemps aussi et Google ne m'a jamais parlé de ça !
    edit : Euh Wiz msvcrt.locking empêche aussi la lecture ? J'ai fais des tests à partir de ça : https://effbot.org/librarybook/msvcr...t-example-3.py et j'ai pas l'impression que c'est ce mode de fonctionnement que souhaite SybelleDeNuit ???
    Pour trouver quelque chose sur Google, il faut déjà lui donner de bons mots clefs.
    Ce qui suppose avoir une idée de ce qu'on cherche!

    Sinon, oui çà fonctionne (mieux sur Windows que sur Linux d'ailleurs) mais py-filelock n'est plus maintenu, utilisez portalocker à la place.
    note: si vous utilisez une fonctionnalité documentée pour.... et que vous n'arrivez pas à la faire fonctionner, est ce que çà ne marche pas ou est-ce que vous n'arrivez pas à la faire fonctionner?

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

  5. #5
    Membre averti
    Femme Profil pro
    Musicienne
    Inscrit en
    Février 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Portugal

    Informations professionnelles :
    Activité : Musicienne

    Informations forums :
    Inscription : Février 2019
    Messages : 22
    Par défaut
    Merci pour vos réponses. Je vais voir comment les mettre en oeuvre.
    Donc il n'existe pas un attribut simple à l'ouverture d'un fichier en lecture pour le rendre inaccessible momentanément aux autres programmes genre open(myfilename, "rx")... C'est curieux...
    Voici la finalité de ma question :
    Un fichier texte contient une liste de job à effectuer. Un de mes ordi en réseau (j'en ai 6) va lire ce fichier pour exécuter le premier travail. Il le supprime alors de la liste. Ainsi quand un autre ordi est disponible, il effectue la même opération de lecture/effacement sur le job qui est en tête de liste. Et ainsi de suite.
    La seule chose que je risque, bien que ce ne me soit jamais arrivé, est que le second ordi lise le nom du job avant que le premier ait eu le temps de l'effacer de la liste. Dans ce cas il exécuterait lui aussi ce job, ce qui n'est pas grave en soi mais comme chacun des jobs peut prendre plus de 3 jours de calcul... C'est trois jour des perdus... Et il y en a un paquet à traitrer... D'autre part je ne peux pas changer l'ordre de ma liste efficacement, pour les mêmes raisons.
    Il doit y a voir une chance sur 100 milliard que cela se produise, mais ça m´énerve de le savoir...

    Bonne fin de semaine à tous.
    Syb'

    PS : je marquerai comme résolu dans quelques jours, le temps de vérifier la faisabilité et l'efficacité des solutions proposées.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Le verrouillage de fichier se fait côté OS, si vous programmez sur des ordinateurs en réseau, çà va dépendre du "file system" qui permettra d'accéder aux fichiers "en réseau"...
    Le plus simple est de passer par un "serveur" à qui on demande quoi faire (et qui pourra sérialiser les demandes et savoir à qui il a confié quoi).

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

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par SybelleDeNuit Voir le message
    Donc il n'existe pas un attribut simple à l'ouverture d'un fichier en lecture pour le rendre inaccessible momentanément aux autres programmes genre open(myfilename, "rx")... C'est curieux...
    Personnellement je n'en trouve pas l'utilité. Quelle raison peut-on avoir de ne pas vouloir qu'un autre procesuss puisse lire un fichier censé être lisible par tous ???

    Citation Envoyé par SybelleDeNuit Voir le message
    Voici la finalité de ma question :
    Un fichier texte contient une liste de job à effectuer. Un de mes ordi en réseau (j'en ai 6) va lire ce fichier pour exécuter le premier travail. Il le supprime alors de la liste.
    Ah là je comprends mieux. Mais dans ce cas, le fichier n'est pas ouvert en lecture mais en écriture et ça c'est quand-même totalement différent !!!

    Citation Envoyé par SybelleDeNuit Voir le message
    La seule chose que je risque, bien que ce ne me soit jamais arrivé, est que le second ordi lise le nom du job avant que le premier ait eu le temps de l'effacer de la liste. Dans ce cas il exécuterait lui aussi ce job, ce qui n'est pas grave en soi mais comme chacun des jobs peut prendre plus de 3 jours de calcul... C'est trois jour des perdus... Et il y en a un paquet à traitrer... D'autre part je ne peux pas changer l'ordre de ma liste efficacement, pour les mêmes raisons.
    Un ordi centralisateur. Il lit les jobs dans le fichier et les mémorise. Ensuite il distribue un job différent à chaque ordi qui vient le lui demander. Comme ça plus de souci de locks ou autres car c'est l'ordi centralisateur qui s'occupe de mettre à jour le fichier.
    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]

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

Discussions similaires

  1. Forcer l'ouverture en lecture seule
    Par Kikumaru dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/06/2007, 12h28
  2. Ouverture en lecture d'un fichier protégé
    Par tintin22 dans le forum Delphi
    Réponses: 3
    Dernier message: 05/11/2006, 21h45
  3. Ouverture fichier lecture seule par le navigateur
    Par Invité dans le forum Langage
    Réponses: 4
    Dernier message: 21/04/2006, 09h37
  4. [Win XP Pro] Lecture exclusive du CD-ROM
    Par Giovanny Temgoua dans le forum Windows XP
    Réponses: 3
    Dernier message: 09/11/2004, 10h26
  5. [MFC] ouverture en lecture d'un fichier inexistant
    Par bigboomshakala dans le forum MFC
    Réponses: 9
    Dernier message: 07/05/2004, 12h42

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