#1 Le 05/09/2012, à 13:17
- amj
[RESOLU] supprimer des lignes d'un fichier avec python
bonjour à tous,
je suis en train d'écrire des fonctions en python qui servent à modifier le fichier /etc/fstab (servant à monter les partitions ou des dossiers) afin de faire un chroot.
J'ai déjà écrit la partie servant à rajouter les ligne:
def addtofstab (chrootlocation):
with open("/etc/fstab", "a") as fstab:
fstab.writelines(
"\n############################################ montages chroot \"liés\"\n"+
"/tmp "+chrootlocation+"/tmp none bind 0 0\n"+
"/dev "+chrootlocation+"/dev none bind 0 0\n"+
"/proc "+chrootlocation+"/proc none bind 0 0\n"
)
Mais je ne sait pas comment les supprimer par la suite.
II me faudrait donc trouver un code pour supprimer les 4 dernières lignes du fichier.
Merci d'avance.
Dernière modification par amj (Le 05/09/2012, à 14:40)
Vive le logiciel libre !! Articles aléatoires sur Wikipédia sur les logiciels libre, sur linux.
Hors ligne
#2 Le 05/09/2012, à 14:06
- moths-art
Re : [RESOLU] supprimer des lignes d'un fichier avec python
Hé bien, c'est pas trop difficile.
def del_to_fstab():
with open("/etc/fstab", "r") as fstab:
# on récupère le contenu de fstab et on lui supprime 4 lignes
fstab_str = ''.join(fstab.readlines()[:-4])
with open("/etc/fstab", "w") as fstab:
# on écrit la modification
fstab.write(fstab_str)
C'est sans doute perfectible mais ça répond au besoin.
PS : attention aux éventuelles accents dans mes commentaires
Site : https://mothsart.github.io Dépôts Git : https://github.com/mothsart PPAs : https://launchpad.net/~jerem-ferry
Hors ligne
#3 Le 05/09/2012, à 14:12
- amj
Re : [RESOLU] supprimer des lignes d'un fichier avec python
merci
mais y a-t-il un risque que le fichier sois vide si le script est interrompu en plein milieu?
Vive le logiciel libre !! Articles aléatoires sur Wikipédia sur les logiciels libre, sur linux.
Hors ligne
#4 Le 05/09/2012, à 14:34
- amj
Re : [RESOLU] supprimer des lignes d'un fichier avec python
merci ça fonctionne
Vive le logiciel libre !! Articles aléatoires sur Wikipédia sur les logiciels libre, sur linux.
Hors ligne
#5 Le 05/09/2012, à 15:25
- moths-art
Re : [RESOLU] supprimer des lignes d'un fichier avec python
mais y a-t-il un risque que le fichier sois vide si le script est interrompu en plein milieu?
Ta remarque était pertinente.
L'option 'w' supprime tout le contenu du fichier avant.
Mes recherches m'ont amenées ici : http://stackoverflow.com/questions/2333 … ith-python
Pour garantir un transfert atomique (c'est à dire que si le script venait à être coupé, on aurait soit le fichier avant modification soit après mais pas entre 2), il faut utiliser un fichier temporaire puis utiliser "os.rename" qui lui est atomique.
Voici le résultat :
def del_to_fstab():
with open("/etc/fstab", "r") as fstab:
fstab_str = ''.join(fstab.readlines()[:-4])
f = open('fstab_tmp', 'w')
f.write(fstab_str)
# make sure that all data is on disk
# see http://stackoverflow.com/questions/7433057/is-rename-without-fsync-safe
f.flush()
os.fsync(f.fileno())
f.close()
os.rename('fstab_tmp', 'fstab')
Site : https://mothsart.github.io Dépôts Git : https://github.com/mothsart PPAs : https://launchpad.net/~jerem-ferry
Hors ligne
#6 Le 05/09/2012, à 20:30
- amj
Re : [RESOLU] supprimer des lignes d'un fichier avec python
merci
j'ai eu une autre idée
je vais faire une copie du fichier avant de le modifier
et après la remettre
je pence que c'est le plus sûr
Vive le logiciel libre !! Articles aléatoires sur Wikipédia sur les logiciels libre, sur linux.
Hors ligne
#7 Le 05/09/2012, à 20:55
- moths-art
Re : [RESOLU] supprimer des lignes d'un fichier avec python
dans ce cas là, tu peux utiliser :
import shutil
shutil.copy('fstab_tmp', 'fstab')
Site : https://mothsart.github.io Dépôts Git : https://github.com/mothsart PPAs : https://launchpad.net/~jerem-ferry
Hors ligne
#8 Le 05/09/2012, à 20:56
- amj
Re : [RESOLU] supprimer des lignes d'un fichier avec python
j'ai fait les modifications comme mis au dessus
import os
def addtofstab(chrootlocation):
with open("test.txt", "a") as fstab:
global fstab_str
fstab_str = ''.join(fstab.readlines())
fstab.writelines(
"\n############################################ montages chroot \"liés\"\n"+
"/tmp "+chrootlocation+"/tmp none bind 0 0\n"+
"/dev "+chrootlocation+"/dev none bind 0 0\n"+
"/proc "+chrootlocation+"/proc none bind 0 0\n"
)
def ressetstab():
with open("test.txt", "w") as fstab:
global fstab_str
fstab.write(fstab_str)
mais j'ai une erreur qui me reviens
chroot.addtofstab("/media/b__")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "chroot.py", line 8, in addtofstab
fstab_str = ''.join(fstab.readlines())
io.UnsupportedOperation: not readable
pourriez vous me dire d'où viens l'erreur
Vive le logiciel libre !! Articles aléatoires sur Wikipédia sur les logiciels libre, sur linux.
Hors ligne
#9 Le 05/09/2012, à 21:06
- moths-art
Re : [RESOLU] supprimer des lignes d'un fichier avec python
C'est normal : vous tentez de lire le fichier alors qu'il est en écriture : "with open("test.txt", "a") as fstab:"
Si vous désirez récupérer avant de modifier
def addtofstab(chrootlocation):
with open("/etc/fstab", "r") as fstab:
global fstab_str
fstab_str = ''.join(fstab.readlines())
with open("test.txt", "a") as fstab:
fstab.writelines(
"\n############################################ montages chroot \"liés\"\n"+
"/tmp "+chrootlocation+"/tmp none bind 0 0\n"+
"/dev "+chrootlocation+"/dev none bind 0 0\n"+
"/proc "+chrootlocation+"/proc none bind 0 0\n"
)
Maintenant, je déconseille vivement les variables globales.
Il vaut mieux passé des donnés en argument d'une fonction et/ou en sortie.
Site : https://mothsart.github.io Dépôts Git : https://github.com/mothsart PPAs : https://launchpad.net/~jerem-ferry
Hors ligne
#10 Le 05/09/2012, à 21:13
- amj
Re : [RESOLU] supprimer des lignes d'un fichier avec python
toujours la même erreur
chroot.addtofstab("/media/b__")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "chroot.py", line 8, in addtofstab
fstab_str = ''.join(fstab.readlines())
io.UnsupportedOperation: not readable
et je suis en tant que root
Vive le logiciel libre !! Articles aléatoires sur Wikipédia sur les logiciels libre, sur linux.
Hors ligne
#11 Le 05/09/2012, à 21:19
- amj
Re : [RESOLU] supprimer des lignes d'un fichier avec python
c'est peut-être lié a ceci
fstab_str = ''.join(fstab.readlines()[:-4])
que j'ai transformé en
fstab_str = ''.join(fstab.readlines())
Vive le logiciel libre !! Articles aléatoires sur Wikipédia sur les logiciels libre, sur linux.
Hors ligne
#12 Le 05/09/2012, à 21:25
- moths-art
Re : [RESOLU] supprimer des lignes d'un fichier avec python
en effet, un bête problème de copier/coller foireux.
Site : https://mothsart.github.io Dépôts Git : https://github.com/mothsart PPAs : https://launchpad.net/~jerem-ferry
Hors ligne
#13 Le 05/09/2012, à 21:25
- amj
Re : [RESOLU] supprimer des lignes d'un fichier avec python
c'est à dire
???
Dernière modification par amj (Le 05/09/2012, à 21:26)
Vive le logiciel libre !! Articles aléatoires sur Wikipédia sur les logiciels libre, sur linux.
Hors ligne
#14 Le 05/09/2012, à 21:29
- moths-art
Re : [RESOLU] supprimer des lignes d'un fichier avec python
hum, j'ai du mal comprendre tes propos :
C'est normal que j'ai mis "fstab_str = ''.join(fstab.readlines())" plutôt que "fstab_str = ''.join(fstab.readlines()[:-4])" !
Quant est-il?
Site : https://mothsart.github.io Dépôts Git : https://github.com/mothsart PPAs : https://launchpad.net/~jerem-ferry
Hors ligne
#15 Le 05/09/2012, à 21:31
- amj
Re : [RESOLU] supprimer des lignes d'un fichier avec python
oui je sait d'ailleurs c'est moi qu'il ai fait
Vive le logiciel libre !! Articles aléatoires sur Wikipédia sur les logiciels libre, sur linux.
Hors ligne
#16 Le 05/09/2012, à 21:31
- pingouinux
Re : [RESOLU] supprimer des lignes d'un fichier avec python
Bonsoir,
Est-ce que le fichier existe ?
D'autre part, les deux lignes suivantes sont équivalentes :
fstab_str = ''.join(fstab.readlines())
fstab_str = fstab.read()
Hors ligne
#17 Le 05/09/2012, à 21:34
- moths-art
Re : [RESOLU] supprimer des lignes d'un fichier avec python
oui, en effet "pingouinux", readlines() n'a plus aucun intérêt...
Site : https://mothsart.github.io Dépôts Git : https://github.com/mothsart PPAs : https://launchpad.net/~jerem-ferry
Hors ligne
#18 Le 05/09/2012, à 21:42
- amj
Re : [RESOLU] supprimer des lignes d'un fichier avec python
oui le fichier existe
et le changement n'a rien ammélioré
Vive le logiciel libre !! Articles aléatoires sur Wikipédia sur les logiciels libre, sur linux.
Hors ligne
#19 Le 05/09/2012, à 21:46
- pingouinux
Re : [RESOLU] supprimer des lignes d'un fichier avec python
Dans ton script du #8, tu ne donnes pas le chemin complet du fichier test.txt. Es-tu dans le bon répertoire quand tu appelles la fonction addtofstab ?
Hors ligne
#20 Le 05/09/2012, à 22:21
- amj
Re : [RESOLU] supprimer des lignes d'un fichier avec python
j'ai mis la structure complète /home/... sans résultat
Vive le logiciel libre !! Articles aléatoires sur Wikipédia sur les logiciels libre, sur linux.
Hors ligne
#21 Le 06/09/2012, à 05:28
- pingouinux
Re : [RESOLU] supprimer des lignes d'un fichier avec python
À tout hasard, pour voir si le fichier n'est pas mal orthographié :
ls -lb /home/...../test.txt
ls -lb /home/...../*.txt
ls -lb /home/...../test.*
Hors ligne