Passage de shell script en prog. Python

Fermé
fberruet Messages postés 4 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 22 août 2008 - 21 août 2008 à 17:55
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 22 août 2008 à 12:29
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.
A voir également:

8 réponses

EminoMeneko Messages postés 2435 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 23 mai 2018 318
21 août 2008 à 18:02
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
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
22 août 2008 à 10:50
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
fberruet Messages postés 4 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 22 août 2008
22 août 2008 à 11:16
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
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
22 août 2008 à 11:19
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
fberruet Messages postés 4 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 22 août 2008
22 août 2008 à 11:34
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
22 août 2008 à 11:38
Je te bricole un exemple d'ici quelques minutes.
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
22 août 2008 à 11:45
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
fberruet Messages postés 4 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 22 août 2008
22 août 2008 à 12:07
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
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
22 août 2008 à 12:29
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