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 :

execution script avec paramètres


Sujet :

Python

  1. #1
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut execution script avec paramètres
    Bonjour à tous ,
    je travaille sous vista avec idle et j'ai copié un petit script sur un bouquin
    Mon problème c'est de le faire démarrer depuis idle !?
    Je peux lancer l'execution du script depuis sa fenêtre (touche F5) mais
    sans pouvoir passer les paramètres.
    Comment faire alors ?????
    Quelle commande utiliser dans le shell (si elle existe) ??

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut
    Si le script est aussi petit que vous le dites postez le qu'on puisse voir à quoi il ressemble.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut
    Ca répond pas trop à ma question ça !?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Je sais mais sans le script, comment voulez vous qu'on réponde?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    En ligne de commande:
    idle.py -r monscript.py this is a test
    programme monscript:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import sys
    for arg in sys.argv:
        print arg
    Exécution:
    /home/gilles/Bureau/monscript.py
    this
    is
    a
    test
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  6. #6
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut
    Merci zavonen mais cela ne répond que partiellement :
    lorsque tu dis "en ligne de commande ..."
    supposes-tu etre dans un shell ?
    Ce que je veux c'est lancer un script lorsque je suis déjà dans idle et que mon script (machin.py) se trouve dans le même répertoire.
    Genre : monscript.py arg1 arg2 arg3
    monscript contenant les instructions suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if __name__ == '__main__' :
    appelFonction()

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    import monscript?

    Lancer un "script" python n'est pas très différent que de lancer un script bash ou perl: il faut dire à l'interpréteur d'exécuter le script qu'on souhaite.
    IDLE vous propose un environnement plus sophistiqué que lorsque vous lancez l'interpréteur en tapant "python"... mais une fois sous les '>>>' lui dire de lancer un script, vous êtes déjà dans le script!!!

    Oubliez les scripts... et pensez monscript.py 'module'
    Lorsque vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if __name__ == '__main__' :
           appelFonction()
    vous dites (sans le savoir)... "Le fichier monscript.py exécute appelFonction() lorsque lancé en tant que script."
    Depuis la console (IDLE par exemple), faites:
    import monscript
    puis
    appelFonction()
    et çà devrait répondre à votre question...

    Enfin j'espère
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut
    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
    35
    36
    37
    "fgrepwc.py -- trouve une chaine dans un fichier texte "
     
    import sys
    import string
     
    # affiche l'usage et quitte
    def usage():
        print("usage: fgrepwc [ -i ] chaine fichier")
        sys.exit(1)
     
    # fonction principale
    def filefind(word,filename):
        count = 0
        try:
            fh = open(filename,'r')
        except:
            print(filename,':',sys.exc_info()[1])
            usage()
        allines = fh.readlines()
        fh.close()
     
        for eachline in allines:
            if string.find(eachline,word) > -1:
                count += 1
                print(eachline),
        print(count)
     
    # validation des arguments et appel filefind()
    def checkargs():
        argc = len(sys.argv)
        if argc != 3:
            usage()
        filefind(sys.argv[1],sys.argv[2])
     
    # execution sur appel direct
    if __name__ == '__main__':
        checkargs()
    bon voilà le code maintenant expliquez moi comment lancer l'execution
    depuis idle

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    J'ai déjà répondu:

    Depuis la console (IDLE par exemple), faites:
    import fgrepwc
    puis
    checkargs()

    Ca ne marche pas?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut
    C'est ça ,exactement :name 'checkargs' is not defined
    Je ne comprend pas ...

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    ah oui, écrire des idées est beaucoup plus 'buggy' que du vrai code:
    Ca doit marcher si vous faites:

    import fgrepwc
    puis
    fgrepwc.checkargs()

    ou

    from fgrepwc import checkargs
    checkargs()

    - W
    PS: vous comprenez pourquoi montrer le code et en parler sont deux choses complètement différentes.
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut
    Ok c'est bon pour mais cela ne résout pas la question du passage des paramètres !!

  13. #13
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    A vrais dire le code que tu a copier ne comporte qu'une procédure (filefind) et non une fonction. Tu ne peut donc pas l'utiliser en import pour récupérer la sortie. Tu dois le faire via subprocess avec un PIPE sur le stdout.

    Si tu souhaite l'utiliser en import tu dois le modifier comme suit :

    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
    def filefind(word,filename):
        retourlignes=[]
        count = 0
        try:
            fh = open(filename,'r')
        except:
            print(filename,':',sys.exc_info()[1])
            usage()
        allines = fh.readlines()
        fh.close()
     
        for eachline in allines:
            if string.find(eachline,word) > -1:
                count += 1
                print(eachline)
                retourlignes.append(eachline)
        print (count)
        return retourlignes, count
    Et l'utiliser comme cela

    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
    >>> import fgrepwc
    >>> lignes, count=fgrepwc.filefind('usage', 'fgrepwc.py')
    # affiche l'usage et quitte
     
    def usage():
     
        print("usage: fgrepwc [ -i ] chaine fichier")
     
            usage()
     
            usage()
     
    5
    >>> print lignes
    ["# affiche l'usage et quitte\n", 'def usage():\n', '    print("usage: fgrepwc [ -i ] chaine fichier")\n', '        usage()\n', '        usage()\n']
    >>> print count
    5
    >>>
    @+
    Merci d'utiliser le forum pour les questions techniques.

  14. #14
    Membre averti
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Points : 387
    Points
    387
    Billets dans le blog
    3
    Par défaut
    bon merci à tous mais ça m'a l'air trop compliqué pour ce petit bout de code .
    De plus,j'ai pu le faire sur linux sans problème ...
    Malgré tout j'ai une autre question concernant une certaine variable d'environnement nommée PYTHONPATH
    Je voudrais savoir où elle se trouve et si on peux la changer ?!

  15. #15
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    bonjour,

    PYTHONPATH ne doit pas être définie par défaut. Tu peux donc la configurer toi même sans soucis, aussi bien sur win32 que sur linux2.

    Cela fonctionne comme toutes les autres variables d'environnement sur ces os.

  16. #16
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Vous pouvez aussi considérer que checkargs est votre main et le ré-écrire légèrement comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # validation des arguments et appel filefind()
    def checkargs(*args):
        if len(args):
            sys.argv = args     # mock argv when called as function
        argc = len(sys.argv)
        if argc != 3:
            usage()
        filefind(sys.argv[1],sys.argv[2])
    et l'appeler depuis la console via
    >>> from fgrepwc import checkargs
    >>> checkargs('fregpwc', 'len', 'fregpwc.py') # le premier argument est pour le fun
    def filefind(word,filename):
    fh = open(filename,'r')
    print(filename,':',sys.exc_info()[1])
    if len(args):
    argc = len(sys.argv)
    5

    et çà fait la même chose que:
    % python fregpwc.py len fregpwc.py

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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AppleScript] Appel d'un script avec paramètre : test sur la présence de paramètre
    Par lying dalai dans le forum AppleScript
    Réponses: 0
    Dernier message: 03/08/2012, 10h05
  2. Executer PL avec paramètre
    Par decisio dans le forum PL/SQL
    Réponses: 8
    Dernier message: 12/07/2012, 13h50
  3. Appel de script avec paramètres
    Par anaon dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/05/2008, 08h38
  4. execution script avec argument
    Par miniseb dans le forum Visual Studio
    Réponses: 1
    Dernier message: 02/10/2007, 17h44
  5. Execution script avec option sur OVH
    Par guepe dans le forum Réseau/Web
    Réponses: 3
    Dernier message: 15/01/2006, 15h54

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