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 :

"python print" ne fonctionne pas


Sujet :

Python

  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut "python print" ne fonctionne pas
    Bonjour,

    Je suis codeur C++, et pour que le débogueur gdb affiche correctement les structures de données, cela doit passer par Python (que je ne connais pas).

    J'ai lancé les deux commandes print figurant au début de cette page web :

    me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    python: can't open file 'print': [Errno 2] No such file or directory
    La version de Python installée sur mon système (CentOS 6.2) est la 2.6.6.

    Je suis perdu. Toute indication sera bienvenue. Merci.

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je ne connais pas gdb, mais peut-être faut-il avoir déjà lancé gdb pour exécuter cette instruction.

    En tout cas, cette instruction dans une console (sans gdb) donne la même erreur, et c'est normal: ça ne correspond pas à la syntaxe de python lancé en ligne de commande ==> "python --help" donne l'aide.

    Pour exécuter une instruction python en ligne de commande:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    python -c "print 42+2"
    44
    Donc, manifestement, il faut avoir lancé gdb avant. Voir sur le lien cité: "il est maintenant possible d’exécuter du python dans GDB"
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Je ne connais pas gdb, mais peut-être faut-il avoir déjà lancé gdb pour exécuter cette instruction.
    JE ne pense pas, car l'invite de gdb est toujours précédée de (gdb), comme on le voit dans la commande ci-dessous, extraite de la page sus-mentionnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (gdb) python print(' '.join(dir(gdb)))
    Citation Envoyé par tyrtamos Voir le message
    En tout cas, cette instruction dans une console (sans gdb) donne la même erreur, et c'est normal: ça ne correspond pas à la syntaxe de python lancé en ligne de commande ==> "python --help" donne l'aide.
    Cela ne serait-il pas lié à python-dev ?

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par oodini Voir le message
    Cela ne serait-il pas lié à python-dev ?
    Je ne crois pas. python-dev ne contribue pas au fonctionnement normal de python: il ne sert qu'à la compilation d'autres programmes qui utilisent ou complètent python.

    En dehors du contexte de gdb (que je connais pas), la ligne "python print 42 42" NE peut PAS marcher. Il faut donc essayer dans gdb. Ce que suggère la phrase extraite du site cité (dernière ligne de mon précédent message).
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  5. #5
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Bonjour

    sous gdb (Gnu DeBugger), avec l'invite "(gdb)", taper "python ..." c'est vouloir/espérer que python (l'interpréteur) analyse et exécute ce qui suit.

    En dehors de la syntaxe dont Tyrtamos a parlé (je n'y reviens pas), c'est, je pense, pareil que taper le nom d'un exécutable et vouloir qu'il s'exécute et affiche ce qui va sur la sortie standard.

    est-ce que

    "(gdb) ls" fournit les fichiers du répertoire courant ?

    Si ce n'est pas le cas, un "(gdb) python ... qqch ..." ne marchera pas non plus
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut
    Citation Envoyé par plxpy Voir le message
    "(gdb) ls" fournit les fichiers du répertoire courant ?
    Non...

    Cela dit, cette page semble donner raison à tyrtamos.

    Bien que ce que je tape soit quelque peu différent de ce qui était indiqué sur la page indiquée dans mon premier message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (gdb) print 42
    $1 = 42

  7. #7
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    donc "'(gdb) python ... quelquechose syntaxiquement correct qui fonctionnerait sous shell ..."
    n'a aucune chance de fonctionner

    C'est rageant mais c'est un "problème" gdb : peut-on (comment ?) "taper" une "commande" à l'invite "'(gdb)" ?
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  8. #8
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Cela dit, cette page semble donner raison à tyrtamos.
    Ce que j'ai écrit n'allait pas le moins du monde à l'encontre de ce que dit Tyrtamos (je pensais avoir été clair).

    Il y a :
    1. la syntaxe pour appeler l'interpréteur python et lui fournir le code, tout ça en une seule ligne/instruction
    2. ce que sait faire gdb : sait-il "ingurgiter" une "commande" que l'on taperait dans l'interpréteur SHELL ?
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut
    Non.

    Mais apparemment, il sait lancer une session python quand on lui demande.

  10. #10
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    tu veux dire que tu te retrouves à pouvoir taper des "commandes" python comme si tu étais, sous interpréteur, avec une invite (un prompt) ">>>" ?
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut
    Oui.

  12. #12
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    gdb a un gros manuel, dont tout un chapitre ("23.2 Scripting gdb using Python") est consacré à Python: il doit y avoir là dedans plein de réponses aux questions :

    http://sourceware.org/gdb/onlinedocs/gdb/index.html#Top

    Et si je lis ici: http://sourceware.org/gdb/onlinedocs...ython-Commands, j'ai l'impression que "python" dans gdb est une COMMANDE de gdb, ce qui explique que la syntaxe de la ligne de commande ne soit pas respectée.

    Il reste que "print 42 42" n'est pas une syntaxe correcte: il faudrait "print 42, 42" ou "print 42".
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  13. #13
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    exercice de rétro-pédalage ...

    J'avoue que je n'imaginais pas un seul instant que "python" puisse être une commande ou un "mot-clé" sous gdb, mais, effectivement, comme l'a dit Tyrtamos, c'est, depuis la version 7, une commande (donc quelque chose qui est interprété par gdb, pas un appel direct à l'interpréteur Python comme on l'entend habituellement).

    Du coup, la comparaison que je faisais entre un "ls" et un "python" sous gdb n'a pas de sens. Du coup, aussi, la syntaxe dont on a l'habitude dans ce forum peut être un peu malmenée : c'est gdb qui décode/analyse ce qui est écrit.

    Quelques "essais", en vrac, avec la version 7 de gdb (dont je ne disposais pas plus tôt) :

    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
    38
    39
    40
    41
    42
    43
    plx@sony:~$ gdb
    GNU gdb (Ubuntu/Linaro 7.2-1ubuntu11) 7.2
    Copyright (C) 2010 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "i686-linux-gnu".
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>.
    (gdb) python
    >import os
    >os.listdir('.')
    >print os.listdir('.')
    >print 42+3
    > 42 + 3
    >  File "<string>", line 5
        42 + 3
        ^
    IndentationError: unexpected indent
    Error while executing Python code.
    (gdb) python print 2 + 3
    5
    (gdb) 
    5
    (gdb) python
    > print "abc"
    >a = "abc"
    >a
    >print a
    >  File "<string>", line 1
        print "abc"
        ^
    IndentationError: unexpected indent
    Error while executing Python code.
    (gdb) python os.listdir('.')
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    NameError: name 'os' is not defined
    Error while executing Python code.
    (gdb) python import os; os.listdir('.')
    (gdb) python "import os; os.listdir('.')"
    (gdb)
    J'avoue ne pas trop y retrouver "mes petits" !
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

Discussions similaires

  1. print() ne fonctionne pas sous ie 6
    Par tite_mushu dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/02/2011, 09h28
  2. Fonction Quoted printable qui ne fonctionne pas.
    Par leCcsympas dans le forum C
    Réponses: 3
    Dernier message: 13/01/2007, 18h54

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