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 :

Modifier un fichier de configuration .conf


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 175
    Par défaut Modifier un fichier de configuration .conf
    Bonjour à tous,

    J'ai besoin d'automatiser la configuration du fichier config d'apache. Deux types d'opérations sont possibles :
    1) Soit chercher des lignes non activés (de la forme #LoadModule proxy_module modules/mod_proxy.so) et les faire activer par la suppression du #.
    2) Soit chercher des lignes et voir comment les modifier (Par exemple, #ServerName localhost:80 et faire modifier localhost par une @IP)

    Pour cela, j'ai pensé à utiliser ReadfIle et re.

    J'ai commencé tout d'abord par essayer d'avoir un code me permettant de lire le fichier:

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    # IMPORT Python
    import re
     
     
    # IMPORT Module
    # from tonprojet.logger import Log <---> pour plus tard
     
    class ConfigFileWorker:
        ''' Work on config file '''
     
        def readFile(self,filename):
            ''' Read httpconfig '''
            try:
                with open(filename, 'r') as file:  # si ça marche pas, enlève le , 'r'
                    for line in file.readlines():
                        print("{0}".format(line))
            except IOError, e:
                # Log.add("error", e) <--> pour plus tard
                print("{0}".format(e))
     
     
    if __name__ == '__main__':
        cfw = ConfigFileWorker()
        cfw.readFile('httpd.conf')
        # plus tard:
        # httpd_config = cfw.readFile('httpd.conf')
    Ce code m'affiche un écran vide que je le trouve vraiment bizarre !!

    J'ai essayé tout mais toujours sans résultat. Pourriez-vous m'aider à avoir un code permettant de lire le fichier d'extension .conf.

    merci beaucoup d'avance !

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 696
    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 696
    Par défaut
    Salut,

    Citation Envoyé par daniel1985 Voir le message
    Ce code m'affiche un écran vide que je le trouve vraiment bizarre !!
    S'il n'y a pas de message d'erreur, c'est que le fichier est vide (ou plutôt que vous n'avez peut être pas ouvert le fichier que vous vous attendiez à ouvrir/lire).
    Vous pourriez commencer par lancer la console Python et regarder ce que sortent les deux instructions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> f = open('httpd.conf', 'r')
    >>> f.read()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 175
    Par défaut
    vous avez raison et pourtant le bloc note garde toujours l'ancienne version... en effet j'ai exécuté une fois le code python qui m'a vidé le fichier

    Merci beaucoup... Si non pour vérifier si une commande est déjà activé et éventuellement le modifier comment vous me conseillez le faire.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 175
    Par défaut
    J'ai essayé ce code pour supprimer le # d'une ligne mais j'ai toujours un fichier vide !!

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    # IMPORT Python
    import re
     
     
    # IMPORT Module
    # from tonprojet.logger import Log <---> pour plus tard
     
    class ConfigFileWorker:
        ''' Work on config file '''
     
        def readFile(self,filename):
            ''' Read httpconfig '''
            try:
                with open(filename, 'w') as file:
                    with open (filename,'r') as filere:
                        for line in filere.readlines():
                            if line.startswith('#Include conf/extra/httpd-ssl.conf'):
                                file.write('Include conf/extra/httpd-ssl.conf')
                                file.close()
     
            except IOError, e:
                # Log.add("error", e) <--> pour plus tard
                print("{0}".format(e))
     
     
    if __name__ == '__main__':
        cfw = ConfigFileWorker()
        cfw.readFile('httpd.conf')
        # plus tard:
        # httpd_config = cfw.readFile('httpd.conf')

  5. #5
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut
    Citation Envoyé par daniel1985 Voir le message
    J'ai essayé ce code pour supprimer le # d'une ligne mais j'ai toujours un fichier vide !!
    Ben quand vous faites ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with open(filename, 'w') as file:
        with open (filename,'r') as filere:
    Vous ouvrez le fichier en mode écriture (et donc vous effacez tout son contenu), puis l'ouvrez pour y lire des choses...

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 696
    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 696
    Par défaut
    Salut,

    Citation Envoyé par daniel1985 Voir le message
    J'ai essayé ce code pour supprimer le # d'une ligne mais j'ai toujours un fichier vide !!
    Ben si vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                with open(filename, 'w') as file:
                    with open (filename,'r') as filere:
    Le premier with crée un fichier qui sera vide.
    Il ne contiendra, a fortiori, pas de lignes commençant par '#'.
    Et donc le fichier créé restera vide: c'est la seule ligne que vous y écrivez avant de le fermer.

    Ceci dit, si vous écrivez du code qui ne fait pas ce que vous en attendez, ajouter des "print", par exemple, pour vérifier que çà fait bien ce que vous attendez (afficher les lignes lues) et vous poser des questions sur pourquoi çà ne le fait pas est le b.a.ba de la programmation.
    Un forum peut vous aider mais le temps que vous passé à attendre une explication sur "pourquoi çà ne le fait pas" ou à espérer qu'on écrive le code votre place serait mieux dépensé à apprendre à programmer avec un tuto (ou à faire écrire le code par quelqu'un qui sait coder).

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

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 175
    Par défaut
    J'ai implémenté ce code.. Certainement il n'est pas le plus optimale (et d'ailleurs je suis preneur d'autres idées plus performants) mais ça marche

    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
    16
    17
     
    def modify_line(path,oldline, newline):
        shutil.copy(path,path+'old.conf')
        with open(path, 'w') as file:
            file.truncate()
        with open(path+'old.conf','r') as tmp:
     
            for l in tmp.readlines():
                if(l.startswith(oldline)):
                    with open (path,'a') as file:
                        file.write(newline+'\n')
                        file.close()
                else:
                    with open (path, 'a') as file:
                        file.write(l)
                        file.close()
        os.remove(path+'old.conf')

Discussions similaires

  1. Modifier un fichier de configuration par le code
    Par Nuloprog dans le forum C#
    Réponses: 5
    Dernier message: 30/01/2009, 18h07
  2. Réponses: 3
    Dernier message: 01/09/2008, 15h30
  3. [2.0] Modifier le fichier de configuration
    Par mister3957 dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 15/11/2007, 08h59
  4. modifier le fichier http.conf
    Par H-bil dans le forum Apache
    Réponses: 12
    Dernier message: 28/06/2006, 16h52
  5. Réponses: 3
    Dernier message: 04/02/2006, 09h49

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