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 ?
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 ?
Bonjour rambc,
Et bien sous Linux je regarderai dans /proc/*/fd/
Je ne sais pas sous Windows ou Mac.
Bonne recherche.
Merci pour cette info.
Peux-tu préciser un peu ?
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...)
Bonjour,
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.
@+
Bonjour.
Pour une fois que je ne pose pas une question à la c---.
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...![]()
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
Bonsoir,
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...
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.
Oups, je me suis peut-être mal exprimé. En fait, je bosse sur une éditeur de documents scientifiques.
Bonjour,
Dans ce cas c'est toi qui gère l'éditeur, c'est cela ?
fcntl.lockf (est son équivalent win32api) ?
Bon code
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: ...
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
Bonjour,
Est-ce que inotify ne conviendrait pas sous linux et une solution du même type sous Windows ?
Bonjour,
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.
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.
@+
Bonjour.
Je vais essayer de regarder cela et voir si cela fonctionne sous Mac.
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"...
Partager