Passage de shell script en prog. Python

fberruet Messages postés 4 Statut Membre -  
sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
Je travaille avec des scripts shell avec lesquels j'arrive à faire à peu près ce que je veux.
Pour différentes raisons, on me demande de passer en Python ( langage que je ne connais pas)
Dans un premier temps pour des raisons de gain de temps, je souhaiterais conserver mes scripts.
J'ai cru comprendre qu'avec Python il était possible d'effectuer des commandes systeme ou bien de lancer des scripts.
Mon probeme est que mes scripts font appel à un fichier de configuration générique parametrable & susceptible d'évoluer.
Comment puis-je faire appel à ce fichier de config.( non statique) une fois que mes scripts seront encapsulés dans du Python.
Est-ce possible ?
Merci de votre aide.
Configuration: Windows XP
Firefox 2.0.0.16

8 réponses

  1. EminoMeneko Messages postés 2499 Statut Membre 318
     
    Je suis aussi intéressé par ta question. Python est plus puissant que le shell script il me semble ou bien c'est Perl peut-être.
    Désolé de ne pas te donner la réponse, en tout cas elle m'intéresse aussi.

    Je pense que je peut quand même te conseiller d'aller faire un tour sur developpez.com pour chercher des FAQ/tutoriaux et autres pour te former.
    Un très bon site pour les gens qui sont amenés plus ou moins à développer.
    A mon avis l'accès au fichier est tout à fait possible. Ça me parait même évident que c'est le cas.
    0
  2. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    Tu pourrais passer des choses en paramètre dans la ligne de commande à ton programme Python.

    Python possède des modules pour lire la ligne de commande, comme optparse.
    Exemples là: https://sebsauvage.net/python/snyppets/index.html#parsing_cmdline

    (optparse et mieux que getopt, quand même)
    0
    1. fberruet Messages postés 4 Statut Membre
       
      J'avais pensé à ce genre de solution qui, je suppose, nécessite de devoir dénomber le nombre de paramêtres à devoir passer à Python.
      Mon pb est que ce fichier de paramêtre est fortement évolutif et, je suppose, devra nécessiter des modifications, à chaque évolution du fichier de paramêtre, au niveau de l'appel du programme Python.
      ( qq part mon fichier "paramêtre" correspond aux "include" dans d'autre langages)
      A-t-on la possibilité sous Python d'introduire ce genre de données ( connues de l'ensemble des programmes) mais sans être obligé de passer les données en parametres du programme ?
      0
  3. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    A-t-on la possibilité sous Python d'introduire ce genre de données ( connues de l'ensemble des programmes) mais sans être obligé de passer les données en parametres du programme ?

    On peut très bien créer un fichier de config du genre:
    variable1=valeur1
    variable2=valeur2
    etc.

    Et de demande à Python de charger "bêtement" l'intégralité de ces paramètres, même s'il ne connait pas leur signification, et même s'il y en a de nouveaux.

    C'est sans problème.
    (Y'a même un module pour lire ce genre de fichier.)
    0
  4. fberruet Messages postés 4 Statut Membre
     
    Merci.
    Je suppose que ce genre de solution n'est pas "parfaite" certes mais elle me permettra, j'espère de passer assez rapidement mes scripts sous Python.

    Excuse moi d'insister, mais est-ce que par hasard, tu n'aurais pas un p'tit exemple de ce genre de programme Python ( faisant appel à ce genre de fichier de données)
    Cela me permettrait de commencer ?
    Merci encore.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    Je te bricole un exemple d'ici quelques minutes.
    0
  7. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    Voilà un exemple.

    Si on a un fichier config.ini contenant:

    [sectionA]
    var1=toto
    var2=titi
    homer=simpson
    
    [sectionB]
    var3=kiki
    var4=roro
    john=doe
    


    On peut le lire comme ça:

    #!/usr/bin/python
    # -*- coding: iso-8859-1 -*-
    import ConfigParser
    
    config = ConfigParser.SafeConfigParser()
    config.read("config.ini")
    for section in config.sections():
        print "Dans la section %s" % section
        for (cle,valeur) in config.items(section):
            print "  La cle %s a comme valeur %s" % (cle,valeur)


    Et il affichera:

    Dans la section sectionB
      La cle john a comme valeur doe
      La cle var3 a comme valeur kiki
      La cle var4 a comme valeur roro
    Dans la section sectionA
      La cle homer a comme valeur simpson
      La cle var1 a comme valeur toto
      La cle var2 a comme valeur titi
    0
  8. fberruet Messages postés 4 Statut Membre
     
    Merci beaucoup.
    Je vais essayer avec mes propres exemples.
    Sinon, pour les évolutions futures comment me conseillerais-tu de faire ( en vrai langage python), pour mettre en oeuvre ces aspects de type " include" sachant que me scripts sont essentiellement une succession de commandes "system" ?
    0
  9. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    Pas de conseils en particulier.
    A toi de choisir une manière d'organiser tout ça.
    Je ne peux pas prendre de décision étant donné que je ne connais pas vraiment le problème et son environnement.

    os.system() est bien, mais subprocess a des avantages (on se connecter à stdin/stdout/stderr du programme lancé pour "dialoguer" avec lui ou juste récupérer ce qu'il affiche.)

    Penser aussi à récupérer le code retour des appels système (généralement: 0=ok, autre=problème).
    ça peut être utile, par exemple pour éviter de lancer un traitement si le précédent a foiré.

    En fait, ce que tu veux faire, c'est un ordonnanceur: un programme qui va lancer diverses tâches, avec des dépendances entre tâches.

    Tu peux effectivement programmer ça toi-même, mais il existe aussi des logiciels spécialsiés dans ce genre de chose.
    0