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 :

Savoir si un fichier est utilisé par une application


Sujet :

Python

  1. #1
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut Savoir si un fichier est utilisé par une application
    Bonjour,
    ma question est dans le titre. L'idée est de ne pas modifier un fichier en même temps qu'une autre application.

    Est-ce que l'ouverture en mode écriture du module os gère ceci ?

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour rambc,

    Et bien sous Linux je regarderai dans /proc/*/fd/
    Je ne sais pas sous Windows ou Mac.

    Bonne recherche.

  3. #3
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Merci pour cette info.

    Peux-tu préciser un peu ?

  4. #4
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    Effectuer une tentative de verrouillage (File lock).
    Si échec c'est que le fichier est en cours d'utilisation
    http://packages.python.org/lockfile/lockfile.html

    Pour apprendre le Python suis ces tutoriels et cours Python : http://python.developpez.com/cours/
    Le meilleur tutoriel Python : Apprendre à programmer avec Python 3 par Gérard Swinnen http://python.developpez.com/cours/apprendre-python3/
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  5. #5
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Citation Envoyé par rambc Voir le message
    Peux-tu préciser un peu ?
    A vrais dire... Non.
    Je me casse les dents sur le sujet depuis ta question. C'est bien plus compliqué et j'ai beau regarder du coté de /proc, lsof et autre cela ne fonctionne pas. De plus il n'y a rien de bien concret sur le sujet sur le web.
    Mais comme le sujet m'intéresse je ne désespère pas de trouver.

    Quiz de la solution de Zavonen, qui semble bonne : Les applications qui utilisent une 'image' du fichier. Exemple vi qui travaille sur un fichier temporaire dans /tmp. Je teste cela ce WE.

    @+

  6. #6
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Bonjour.

    Citation Envoyé par PauseKawa Voir le message
    Je me casse les dents sur le sujet depuis ta question. C'est bien plus compliqué et j'ai beau regarder du coté de /proc, lsof et autre cela ne fonctionne pas. De plus il n'y a rien de bien concret sur le sujet sur le web.
    Pour une fois que je ne pose pas une question à la c---.

    Citation Envoyé par PauseKawa Voir le message
    Quiz de la solution de Zavonen, qui semble bonne : Les applications qui utilisent une 'image' du fichier. Exemple vi qui travaille sur un fichier temporaire dans /tmp. Je teste cela ce WE.
    J'ai constaté cela aussi avec TextWrangler sous Mac qui accepte que le fichier soit modifié par une autre application, mais qui arrive aussi à savoir qu'une modification a été faite par une autre application.

    Le module lockfile indiqué dans le post ci-dessus ne fonctionne pas sous Python 3...

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

    De façon générale, c'est une "feature" qui repose sur des fonctionnalités de l'OS dont Python n'est que "client"...
    Les seules "features" qu'on peut espérer retrouver dans les différents OS sont celles héritées de leur conformité POSIX - mais c'est plutôt "unixien", Windows l'est en partie modulo des ajouts.

    Reste à réaliser une fonction is_open déclinée différemment sur chaque OS. Sur Google, chercher "mandatory file locking".

    Ceci dit, on arrive inévitablement à réaliser un protocole obligeant A à ouvrir ses fichiers d'une certaine façon pour que B le sache - un protocole "simple" peut être réalisé via fcntl pour poser des "locks" - sur UNIX.

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

  8. #8
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonsoir,

    Citation Envoyé par wiztricks Voir le message
    De façon générale, c'est une "feature" qui repose sur des fonctionnalités de l'OS dont Python n'est que "client"...
    Les seules "features" qu'on peut espérer retrouver dans les différents OS sont celles héritées de leur conformité POSIX - mais c'est plutôt "unixien", Windows l'est en partie modulo des ajouts.
    C'est aussi ce que je pense.

    Pour ce qui est de Windows vous avez les 'ajouts' comme:
    Les outils Sysinternals.
    Les 'moniteurs' des Antipsywares/Antivirus.
    Etc...
    (Désolé, mes certifs MS commencent a dater...)

    Sous Linux cela me semble impossible.
    Dans le cas d'un éditeur par exemple vous avez trois fonctions :
    1) Lecture du fichier et création d'une copie (mémoire ou temporaire). Enregistrement de la date de copie. Fermeture du fichier (Pfff).
    2) Travail sur la copie.
    3) Si enregistrement > vérification de la date de copie. C'est la même ok, sinon avertissement.
    Soit en Python os.stat > st_atime.
    Donc lsof et /proc sont inutiles.
    Je pense que les solutions Windows fonctionnent sur l'idée d'un os.stat. A voir si c'est une feature ou pas.

    Sous Mac : Demande gentil donateur car depuis MacOS 9...

    Pas de solution universelle...

  9. #9
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Re bonsoir,

    Citation Envoyé par rambc Voir le message
    L'idée est de ne pas modifier un fichier en même temps qu'une autre application.
    C'est juste une question théorique ?
    Ne trouvant pas de solution je me demande ce que tu souhaite faire exactement.

  10. #10
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Bonjour,
    en fait dans le cadre d'un projet perso, l'utilisateur va travailler sur des fichiers TXT. Je voudrais donc savoir si un fichier ouvert dans mon appli. a été modifié depuis une autre afin de laisser le choix à l'utilisateur d'enregistrer la modification faite dans mon appli. ou bien celle faite ailleurs.

    J'avais bien pensé à os.stat mais je pensais qu'il existait un outil tout prêt pour cela.

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 681
    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 681
    Par défaut
    Citation Envoyé par rambc Voir le message
    Bonjour,
    en fait dans le cadre d'un projet perso, l'utilisateur va travailler sur des fichiers TXT. Je voudrais donc savoir si un fichier ouvert dans mon appli. a été modifié depuis une autre afin de laisser le choix à l'utilisateur d'enregistrer la modification faite dans mon appli. ou bien celle faite ailleurs.
    Pourquoi ne pas réaliser cela avec avec un outil de gestion de versions tel que SVN ou Mercurial?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Oups, je me suis peut-être mal exprimé. En fait, je bosse sur une éditeur de documents scientifiques.

  13. #13
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Dans ce cas c'est toi qui gère l'éditeur, c'est cela ?
    fcntl.lockf (est son équivalent win32api) ?

    Bon code

  14. #14
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 681
    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 681
    Par défaut
    Citation Envoyé par rambc Voir le message
    Oups, je me suis peut-être mal exprimé. En fait, je bosse sur une éditeur de documents scientifiques.
    Ce sont des fichiers textes, comme du "code source" normal, non?
    Il n'est donc pas interdit de "versionner" et de gérer les mises à jours effectuées via des outils "ad hoc".
    Si on veut rendre cela plus transparent, on peut aller vers du WebDAV/DeltaV.

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

  15. #15
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    Dans ce cas c'est toi qui gère l'éditeur, c'est cela ?
    fcntl.lockf (est son équivalent win32api) ?
    Merci.

    Le code suivant bloque tout changement par une application autre sous Mac, et j'imagine aussi sous Linux. Il reste le cas de Windaube à gérer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #! /usr/bin/env python3
     
    # Source :
    #    http://docs.python.org/release/3.0.1/library/fcntl.html?highlight=fcntl#fcntl.flock
     
    import fcntl
     
    file = open("test.txt", "a")
    fcntl.flock(file.fileno(), fcntl.LOCK_EX)
     
    while True:
        ...

  16. #16
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Pour Windaube, j'ai trouvé sur le net le code ci-dessous. Il bloque bien mon fichier s'il est modifié-enregistré dans une autre application.
    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
     
    # -*- coding: utf-8 -*-
     
    # Source : 
    #    http://mail.python.org/pipermail/python-win32/2001-August/000129.html
     
    import win32file
    from win32con import *
     
    fd = win32file.CreateFile('test.txt',
                               GENERIC_READ, 0, None,
                               OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
     
    while True:
        pass

  17. #17
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Bonjour,

    Est-ce que inotify ne conviendrait pas sous linux et une solution du même type sous Windows ?

  18. #18
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Citation Envoyé par dividee Voir le message
    Est-ce que inotify ne conviendrait pas sous linux et une solution du même type sous Windows ?
    L'utilisation d'un wrapper d'inotify limite la chose à Linux il me semble.
    Pour mac c'est l'FSEvents API, c'est bien cela ?
    Puisque rambc est maitre de l'éditeur il me semble plus simple de mettre un lock (avis perso qui n'engage que moi ).
    C'est toutefois une bonne chose si on ne connais pas l'éditeur et répond à la question d'origine. Cela répond aussi au questionnement que j'avais sur les éditeurs qui utilisent une copie des fichiers : Merci dividee.

    Citation Envoyé par rambc Voir le message
    Le code suivant bloque tout changement par une application autre sous Mac, et j'imagine aussi sous Linux.
    Sur mon système j'ai des erreurs avec l'exclusif LOCK_EX. Je regarde cela de plus prés et si je ne trouve pas tu auras peut être la réponse

    Bon code

    Edit : L'utilisation d'inotify implique une surveillance du système (threading).
    @rambc : pyinotify est compatible Python 3.

    @+

  19. #19
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725

  20. #20
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Bonjour.
    Citation Envoyé par dividee Voir le message
    Est-ce que inotify ne conviendrait pas sous linux et une solution du même type sous Windows ?
    Je vais essayer de regarder cela et voir si cela fonctionne sous Mac.

    Citation Envoyé par PauseKawa Voir le message
    Puisque rambc est maitre de l'éditeur il me semble plus simple de mettre un lock (avis perso qui n'engage que moi ).
    Je suis aussi de cet avis.

    Ceci étant écrit, la méthode "notify" est plus douce. De plus, je viens de voir qu'il est possible de surveiller aussi un dossier. Là, cela devient très intéressant car mon projet va produire des documents à partir de dossiers contenant des fichiers TXT. "Yapluka"...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 22
    Dernier message: 02/10/2009, 10h31
  2. Tester si le fichier est utilisé par une autre appli
    Par sivaller dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 05/06/2008, 19h47
  3. Savoir si un fichier est utilisé
    Par arnaud036 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 26/09/2007, 11h57
  4. Réponses: 7
    Dernier message: 15/06/2007, 18h50
  5. Réponses: 7
    Dernier message: 23/03/2005, 22h23

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