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 :

Code qui marche si je le tape ligne par ligne dans la console mais pas si je l'exécute


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    ceo
    Inscrit en
    Août 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ceo

    Informations forums :
    Inscription : Août 2005
    Messages : 62
    Points : 48
    Points
    48
    Par défaut Code qui marche si je le tape ligne par ligne dans la console mais pas si je l'exécute
    Bonjour,

    j'ai un pb que je trouve vraiment bizarre, j'ai un code qui marche si je l'écris ligne par ligne dans la console, mais si je le copie-colle ou l'exécute directement en appelant le nom du fichier dans le bash il y a des erreurs (différentes qui plus est) :

    le code en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    notes = open('notes.txt', 'r')
    moyennes = open('moyennes.txt', 'w') 
    dico = {}
    for line in notes:
      liste = line.split()
      for x in range (1, len(liste)):
        dico[liste [0]] = dico.get(liste[0], 0) + int(liste[x])
    for z in dico: dico[z] = dico[z]/float(len(liste) - 1)
    for z in dico: 
      moyennes.write(z + ' : ' + repr(dico[z]) + '\n')
    notes.close()
    moyennes.close()

    Quand je copie-colle d'un coup, j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ... for z in dico: dico[z] = dico[z]/float(len(liste) - 1)
      File "<stdin>", line 5
        for z in dico: dico[z] = dico[z]/float(len(liste) - 1)
          ^
    SyntaxError: invalid syntax


    Et quand je l'exécute en appelant le nom du fichier dans le bash, j'ai une erreur encore plus surprenante à la première ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    prog.py: ligne 1: Erreur de syntaxe près du symbole inattendu « ( »
    prog.py: ligne 1: `notes = open('Bureau/langagesprog/notes.txt', 'r')'

    Merci d'avance à ceux qui prendront le temps de me répondre.

  2. #2
    Expert éminent

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

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

    Tu dois l'appeler avec python sinon il s'exécute comme du bash ce qui explique l'erreur de symbole inattendu.
    Ou bien tu rajoutes au début de ton code le shebang qui convient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #! /usr/bin/python
    et tu le rend exécutable.

  3. #3
    Membre du Club
    Profil pro
    ceo
    Inscrit en
    Août 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ceo

    Informations forums :
    Inscription : Août 2005
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Merci de ta réponse,
    bon cette question doit être énormément posée mais je ne trouve pas comment trouver le chemin de python sur mon PC...

    j'ai essayé :
    #! simon/local/bin/python
    #! simon/bin/python
    #! simon/bin/env python
    et #! simon/bin/env

    mais ça ne fonctionne pas;

    et j'ai vu qu'en tapant import sys puis print sys.executable on pouvait le trouver,
    mais j'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    simon@simon-VirtualBox:~$ import sys
    Le programme 'import' peut être trouvé dans les paquets suivants*:
     * imagemagick
     * graphicsmagick-imagemagick-compat
    Essayez*: sudo apt-get install <paquet sélectionné>
    simon@simon-VirtualBox:~$ 
    simon@simon-VirtualBox:~$ print sys.executable
    Warning: unknown mime-type for "sys.executable" -- using "application/octet-stream"

  4. #4
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Meuh non, sous Linux tu ne dois pas donner le chemin de Python, utilise textuellement ce que je t'ai montré comme code.

    Tu refais la même erreur ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    simon@simon-VirtualBox:~$ import sys
    Le programme 'import' peut être trouvé dans les paquets suivants*:
    ...
    Ce n'est pas l'import de Python que bash comprend ici !


    Tapes simplement ceci dans ta console et regardes le résultat:
    décidément trop simple Linux ...

  5. #5
    Membre du Club
    Profil pro
    ceo
    Inscrit en
    Août 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ceo

    Informations forums :
    Inscription : Août 2005
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Oui oui j'avais bien compris et ça marche avec la ligne de commande python lenomduprog, merci.
    Et je sais ce qui se passe quand je tape juste python dans la console, je m'en suis servi pour écrire ce code et l'interpréter pas à pas.

    C'est le shebang qui convient à mettre dans mon fichier pour pouvoir l'exécuter directement que je ne trouve pas!
    Le #! /usr/bin/python ne marche pas.

    Merci d'avance

  6. #6
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Tu es sur que c'est le shebang qui ne fonctionne pas ?

    Fais un copier-coller du traceback complet de l'erreur, qu'on voie ça.

  7. #7
    Membre du Club
    Profil pro
    ceo
    Inscrit en
    Août 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ceo

    Informations forums :
    Inscription : Août 2005
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Ca m'en a tout l'air en tout cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bash: prog.py : simon/bin/env : mauvais interpréteur: Aucun fichier ou dossier de ce type

  8. #8
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    J'ai l'impression qu'on ne se comprend pas.

    D'où sort ce ?

    Ça ne se peut pas,

    Ce doit être
    et rien d'autre.

    En plus, pourquoi est-il inscrit:
    Ce n'est pas ce que j'ai montré précédement pour lancer un script à partir d'une console,

    C'est comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vincent@tiemoko:~$ python monScript.py
    (avec mon prompteur) ça et rien d'autre que ça.

  9. #9
    Membre du Club
    Profil pro
    ceo
    Inscrit en
    Août 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ceo

    Informations forums :
    Inscription : Août 2005
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    En effet on ne doit pas bien se comprendre,
    #! simon/bin/env fait partie des nombreux shebang que j'ai testé mais j'ai aussi testé celui-ci : #! /usr/bin/python qui me renvoit la même erreur.
    (je me demandais s'il fallait pas remplacer usr par mon nom d'utilisateur)

    Il est inscrit bash mais c'est bien la bonne ligne que j'ai au dessus(me semble-t-il) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    simon@simon-VirtualBox:~$ prog.py
    bash: prog.py : usr/bin/python : mauvais interpréteur: Aucun fichier ou dossier de ce type

    Enfin :
    Tu dois l'appeler avec python sinon il s'exécute comme du bash ce qui explique l'erreur de symbole inattendu.
    Code :Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2

    python prog.py
    Ou bien tu rajoutes au début de ton code le shebang qui convient
    Code :Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2

    #! /usr/bin/python
    Je lis "ou bien" et donc j'avais cru comprendre qu'une fois le shebang indiqué dans le script plus besoin de marquer python dans le shell. D'ailleurs c'est ça que je recherche, le fait d'avoir à juste taper le nom du fichier dans le shell ou alors qu'il s'exécute juste en double-cliquant dessus.

  10. #10
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Regardes dans /usr/bin/ si tu as bien un fichier python, un fichier avec une flèche dans l'icône et qui est un lien qui renvoie vers un python2.x qui est ta version par défaut.

    Quand tu entres simplement python dans la console, tu peux voir quel est cette version par défaut.

    Il faut que dans /usr/bin/ tu aies bien aussi ce fichier python2.x, sinon le lien serait corrompu pour une quelconque raison.


    Si tu veux lancer le programme en console sans entrer python, il faut qu'il soit exécutable.

    Clic gauche sur le fichier >> Propriétés >> onglet Permission >> cochez une case disant à peu près Autoriser l'exécution comme un programme (Ceci diffère selon les distributions Linux)

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 39
    Points : 25
    Points
    25
    Par défaut
    Bonjour, la commande which à la rescousse ?

    $ which python
    /usr/bin/python


    Voila de quoi renseigner le shebang : #!/usr/bin/python

    @+

  12. #12
    Membre éprouvé Avatar de Marc3001
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2008
    Messages
    829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2008
    Messages : 829
    Points : 1 275
    Points
    1 275
    Par défaut
    Attention,
    Si le shebang est positionné, il n'est pas besoin de lancer ton programme en le préfixant du nom de l'interpréteur. C'est le rôle du shebang justement.

    Donc :
    - Soit tu mets le shebang et tu lances ton script directement comme ça :
    - Soit tu ne mets pas de shebang et tu lances le script en spécifiant l'interpréteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    python /MonChemin/prog.py
    Le logiciel, c'est comme le sexe, c'est meilleur quand c'est libre.

    Linus Torvalds

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/09/2009, 13h00
  2. qui peux m'expliquer ce code ligne par ligne merci
    Par superuser dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 08/04/2008, 11h25
  3. code qui marche sur firefox et pas sur IE7
    Par taka10 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 15/03/2007, 11h59
  4. Assistance au code qui marche plus?
    Par bslota dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 07/03/2007, 14h40
  5. Code qui marche, mais pas la mise à jour
    Par Cablan dans le forum Access
    Réponses: 7
    Dernier message: 24/10/2005, 17h09

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