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 :

Boucle for problème argument


Sujet :

Python

  1. #1
    Inactif  
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 20
    Points : 15
    Points
    15
    Par défaut Boucle for problème argument
    Bonjour

    Je débute dans le langage python
    Je me confronte déjà a un problème :

    J aimerais passer en paramètre un tableau php dans mon fichier python


    Voici ma commande php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tab_id = array(13,15);
    exec('/usr/bin/python gpio_detect.py' .$tabid)
    mais pour simuler j exécute cette commande en ssh:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    python2.7 gpio_detect.py [13,15]
    Dans mon fichier python je narrive pas a boucler sur le tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tab_input = sys.argv[1] 
     
    for gpio_input in tab_input:
    	print gpio_input
    resultat :

    [
    Comment faire pour afficher
    13
    15



    En vous remerciant

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 761
    Points : 58 001
    Points
    58 001
    Billets dans le blog
    42
    Par défaut
    Bonsoir,

    Citation Envoyé par mickeys Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    python2.7 gpio_detect.py [13,15]
    et avec python gpio_detect.py 13 15 ? Sans les crochets et la virgule.

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Le problème c est que je vais devoir passer 2 tableau en paramètre

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    Salut,

    L'argument 1, soit [13,15], n'est pas une liste mais une chaîne de texte et donc logiquement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    >>> for i in '[13,15]':
    ...     print(i)
    ... 
    [
    1
    3
    ....
    Comme dit f-leb, passe tes arguments sans crochets ni virgules et reconstitue tes listes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >>> args = '13 15 85 47'.split()
    >>> l1 = [int(x) for x in args[:2]]
    >>> l2 = [int(x) for x in args[2:]]
    >>> l1, l2
    ([13, 15], [85, 47])

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 354
    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 354
    Points : 36 882
    Points
    36 882
    Par défaut
    Salut,

    Citation Envoyé par mickeys Voir le message
    Le problème c est que je vais devoir passer 2 tableau en paramètre
    Le vrai problème est que vous ne passez pas de "tableau" mais des "chaînes de caractères".
    Leur format doit être assez simple pour pouvoir reconstruire vos tableaux d'entiers.
    La difficulté supplémentaire est que vous passez par la ligne de commande: les "blancs" vont créer autant d'éléments dans la liste sys.argv.
    Il va falloir "regrouper" les éléments d'un même tableau avec des '"'.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import sys
    for x, s in enumerate(sys.argv):
        print ('%d: /%s/' % (x, s))
    Ce script se contente d'afficher les "paramètres" reçus dans sys.argv.
    Lancé avec, çà sort:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ python showargs.py 12 34 56 78
    0: /showargs.py/
    1: /12/
    2: /34/
    3: /56/
    4: /78/
    Pas facile de ranger çà dans des tableau différents (sauf si les deux tableaux sont de taille fixe).
    Pour regrouper:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ python showargs.py "12 34" "56 78"
    0: /showargs.py/
    1: /12 34/
    2: /56 78/
    Reste à convertir les chaînes de caractères en entiers mais cela vous a déjà été montré.

    - W

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Comme dit f-leb, passe tes arguments sans crochets ni virgules et reconstitue tes listes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >>> args = '13 15 85 47'.split()
    >>> l1 = [int(x) for x in args[:2]]
    >>> l2 = [int(x) for x in args[2:]]
    >>> l1, l2
    ([13, 15], [85, 47])
    [/QUOTE]

    Merci a tous pour vos retours

    cette solution me parait la plus facile a exploiter
    je ne connais pas le nmobre d argument que je passe en parametre

    pour aller dans le détail : j ai besoin de récupérer tous les input et tout les output d un raspberry
    je les connais en php.


    si je passe comme paramétre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monfichierpython.py 13,15,18,5 | 6,8,9,7
    comment faire pour récupérer 2 tableaux
    je peux me servir de | pour les reconnaître

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 354
    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 354
    Points : 36 882
    Points
    36 882
    Par défaut
    Citation Envoyé par mickeys Voir le message
    si je passe comme paramétre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monfichierpython.py 13,15,18,5 | 6,8,9,7
    comment faire pour récupérer 2 tableaux
    je peux me servir de | pour les reconnaître
    Dans la ligne de commande, "|" sera interprété comme "pipe".
    Et çà va pas le faire.

    - W

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    rien n y fait

    c est fou comme même

    j ai 2 array php que j aimerais utiliser dans un python

    impossible a faire ?

  9. #9
    Inactif  
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Si ca peux aider , voici la solution

    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
     
    import optparse
     
    parser = optparse.OptionParser("usage: %prog -h   pour l'aide")
    parser.add_option("-i", "--input", dest="gpio_input", default="none", type="string", help="liste GPIO input")
    parser.add_option("-o", "--output", dest="gpio_output", default="none", type="string", help="Liste GPIO output")
     
     
    tab_input = options.gpio_input
    tab_output = options.gpio_output
     
    pin_input = tab_input.split(',')
    for gpio_input in pin_input:
    	print gpio_input
     
     python2.7 gpio_detect.py  --input 15,13 --output 4,16

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

Discussions similaires

  1. [XL-2003] VBA boucle for - problème incrémentation
    Par HankMoody dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/07/2012, 17h31
  2. Réponses: 2
    Dernier message: 18/09/2008, 12h22
  3. boucle for, problème !
    Par haricot75 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/02/2007, 17h51
  4. Boucle for, problème aux bords
    Par dword2add dans le forum C
    Réponses: 16
    Dernier message: 21/10/2006, 17h18
  5. Problème avec une DLL dans une boucle For
    Par BraDim dans le forum Langage
    Réponses: 5
    Dernier message: 20/09/2005, 12h22

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