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.
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.
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.
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
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
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
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
Bonjour,
Il y a un module python qui doit pouvoir d'aider et c'est cross-platform.
https://code.google.com/p/psutil/
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.
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())
@+
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager