OVH Cloud OVH Cloud

open en mode "a+" sous mac

12 réponses
Avatar
Sébastien Kirche
Bonjour,

Y a-t-il des utilisateurs Python sous OSX dans la salle ?

j'ai rencontré un petit problème dans un script utilisé par MacCvsX pour
ajouter une entrée dans un .cvsignore.

Le script en question ouvre le fichier en mode "a+" pour
- lire le contenu par readlines()
- ajouter un élément au tableau
- tronquer le fichier
- écrire le tableau modifié dans le fichier

Or, readlines() après l'ouverture retourne un tableau vide.
Testé ici avec Python 2.4 (#1, Feb 24 2005, 11:32:53)

J'ai corrigé le problème en ouvrant le fichier en lecture, puis en le
rouvrant ensuite en écriture, mais ce problème m'inquiète.

Comment je pourrais savoir si c'est un bug ?
L'un d'entre vous l'aurait-il rencontré ou pourrait me le confirmer ?
Merci.

--
Sébastien Kirche

2 réponses

1 2
Avatar
Sébastien Kirche
On Sat, 30 Apr 2005 13:26:57 +0200
Eric Jacoboni wrote:

| Donc, en gros, avec le mode +, c'est à toi de gérer le curseur pour
| que l'instruction soit cohérente et, si on suppose que le mode majeur
| "a" positionne à la fin, il n'est pas cohérent de vouloir lire
| immédiatement après avoir ouvert un fichier...

Oui, avec le reste de ton développement, ce n'est pas illogique.
C'est même logique, pour ne pas faire de double négation :)

Gérer un repositionnement au début après l'ouverture en "a+" ne me gène
pas en soi. Le problème c'est qu'entre les différents intervenants de
ce fil il y a des résultats différents entre mac et win/linux. D'où mon
questionnement sur un bug possible.

--
Sébastien Kirche
Avatar
Eric Jacoboni
In article , SÈbastien Kirche
wrote:


Gérer un repositionnement au début après l'ouverture en "a+" ne me gène
pas en soi. Le problème c'est qu'entre les différents intervenants de
ce fil il y a des résultats différents entre mac et win/linux. D'où mon
questionnement sur un bug possible.


La doc Python 2.3 dit que le mode des fonctions open() ou file() a la
même signification que celui de fopen().

La norme POSIX de fopen() dit explicitement:

a+ or ab+ or a+b
Append; open or create file for update, writing at end-of-file.

On notera la présence du ';' après Append, ce qui indique bien que ce
positionnement final est le point essentiel.

Après, que le comportement varie en fonction des plateformes, ça peut
sembler curieux, effectivement. Il faudrait voir si la définition du
langage prévoit ce genre de différences : si ce n'est pas le cas,
j'appelerais ça un bug, oui.

--
jaco

1 2