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 :

Methode pour savoir si un fichier est deja ouvert par un autre process


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 92
    Points : 52
    Points
    52
    Par défaut Methode pour savoir si un fichier est deja ouvert par un autre process
    Bonjour a tous,

    Je cherche une methode afin de savoir si un fichier est deja ouvert (Read ou Write) par un autre process. Y a t-il un moyen de le savoir sous Python ?

    Un grand merci pour votre aide.

  2. #2
    Membre confirmé
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 618
    Points
    618
    Par défaut
    Bonjour,

    Il n'est pas vraiment possible de savoir si un fichier est ouvert (utilisé) par un autre processus car un processus peut monter en ram un fichier puis le fermer et le réouvir pour écrire dedans. Des problèmes de droits peuvent également se poser. Si c'est ton application qui va être lancé plusieurs fois, tu peux créer un fichier 'un_fichier.lock' et tu test à chaque ouverture d'un fichier s'il n'y a pas de fichier .lock associé.

    Voici un morceau de code qui va chercher si d'autre processus utilise le même fichier que toi, mais ce n'est pas infaillible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for pid in os.listdir( '/proc/'):
        if pid.isdigit() and pid != os.getpid():
            try:
                for fd in os.listdir('/proc/%s/fd' % pid): 
                        print os.path.samefile(mon_fichier.name, '/proc/%s/fd/%s' % (pid, fd))
            except:
                pass # pas les droits ou processus tué entre temps.
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 92
    Points : 52
    Points
    52
    Par défaut
    Bonjour,

    Je te remercie pour la réponse. En fait, mon application vient ouvrir et valider un ensemble de fichiers sous la seule conditions qu'ils soient pas utilises par un autre process (d'une autre appli) et c'est bien la mon soucis.
    Ton idee est tres bonne, mais je me demandais comment fait Windows, car windows peut savoir si une thread utilise deja ce meme fichier, non ? ou bien je me trompe.

    Merci

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par gilles06 Voir le message
    Ton idee est tres bonne, mais je me demandais comment fait Windows, car windows peut savoir si une thread utilise deja ce meme fichier, non ? ou bien je me trompe.
    Windows est un système d'exploitation (comme Linux).
    Normal qu'il fasse la police pour permettre ou interdire l'accès à des objets partagés ou privés comme les fichiers.

    Python n'est qu'un langage de programmation. Il ne sait pas si un fichier est ouvert ou pas. Lorsque le programme écrit en Python ou autre essaiera d'ouvrir un fichier X et que le système d'exploitation ne le permet pas: çà remonte l'erreur. Le programme la gère ou se vautre.

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

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 92
    Points : 52
    Points
    52
    Par défaut
    Bonjour,

    Je suis bien d'accord avec ta réponse, mais si Windows sais le faire, c'est qu'il doit avoir une API quelque part, et donc je me disais que Python pourrait aussi exploiter cette API comme Windows le fait et récupérer les infos.

    - G

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par gilles06 Voir le message
    Je suis bien d'accord avec ta réponse, mais si Windows sais le faire, c'est qu'il doit avoir une API quelque part, et donc je me disais que Python pourrait aussi exploiter cette API comme Windows le fait et récupérer les infos.
    Certes, mais c'est une API Windows.
    vincent.mbg vous a montré une API Linux.

    Le plus simple serait d'aller voir ce que font handle côté Windows et lsof côté Linux.
    Ce sont de programmes qui mettent les API en musique sous forme de commandes externes à passer.
    Vous récupérez la sortie et voilà.

    Après vous pouvez coder un équivalent de ces programmes mais il faut trouver les API systèmes, voir comment elles sont mises en œuvre (en général c'est du C/C++) puis appeler çà depuis Python.

    Il n'y a rien de prêt à l'emploi dans les librairies livrées en standard avec Python.

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

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 92
    Points : 52
    Points
    52
    Par défaut
    OK merci , je vais voir de ce cote.

  8. #8
    Membre confirmé
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 618
    Points
    618
    Par défaut
    Bonjour,

    Il y a un module python qui doit pouvoir d'aider et c'est cross-platform.
    https://code.google.com/p/psutil/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    import psutil
    files_useds = []
    for pid in psutil.pids():
        p = psutil.Process(pid)
        files_useds.append(p.open_files())
    Par contre j'ai pas testé, et comme je l'ai dit, si ton application ouvre un fichier, après avoir vérifiée qu'il soit disponible. Un autre processus pourra très bien l'ouvrire juste après alors que ton application tourne encore.

    @+
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/12/2012, 00h21
  2. Réponses: 2
    Dernier message: 11/06/2010, 15h45
  3. savoir si un fichier est deja fermé
    Par oswalidos dans le forum C
    Réponses: 2
    Dernier message: 16/04/2009, 12h29
  4. Methode pour savoir si une CheckBox est cochée
    Par poulette3000 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 13/07/2007, 10h54
  5. Detecter si un Fichier est deja ouvert
    Par Didier Derain dans le forum C++Builder
    Réponses: 8
    Dernier message: 25/02/2005, 19h27

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