Python: exec('x') => NameError: name 'x' is

Résolu
Ssylvainsab Messages postés 2892 Statut Modérateur -  
 madprog -
Bonjour.

J'essaie de faire fonctionner un script python.
Je voudrais exécuter un fichier externe, mais il y a une erreur dans mon code.
exec('configurations-calculees/'+type_jeu+'.py')

A l'exécution du fichier (python fichier.py), j'ai cette erreur : NameError: name 'configurations' is not defined
D'où cela peut-il venir ?

Merci.
--
Sylvain

9 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    C'est pas plutôt des "..." au lieu des '...' ?
    http://diveintopython.adrahon.org/native_data_types/formatting_strings.html

    Bonne chance
    0
  2. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Ben le problème c'est que avec python une chaine en simple quote ou double quote c'est la même chose, j'arrive pas à savoir ce qui cloche dans son code :-(
    0
  3. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Ah mais si voilà: exec c'est fait pour executer du code python directement et non pas un fichier.
    exec "print machin"


    Si tu veux executer un fichier c'est execfile(nomfichier.py) qu'il faut utiliser.
    0
  4. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Je pense que exec ne fait pas ce que tu crois, à mon avis c'est plutôt :
    import os
    os.system('configurations-calculees/'+type_jeu+'.py')
    

    Exemple
    (mando@aldur) (~) $ python
    Python 2.4.4 (#2, Jan  3 2008, 13:36:28)
    [GCC 4.2.3 20071123 (prerelease) (Debian 4.2.2-4)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import os
    >>> os.system('/sbin/route -n')
    Table de routage IP du noyau
    Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
    192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth3
    0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth3
    0
    

    Bonne chance
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Ssylvainsab Messages postés 2892 Statut Modérateur 825
     
    Merci !
    Effectivement ça semble fonctionner mieux avec execfile ou os.system (même si ce n'est pas encore parfait).
    Cependant, je ne sais pas quel est le répertoire dans lequel je suis quand je veux exécuter le script, et j'aimerais pouvoir l'utiliser sous windows et Linux.
    Est-ce qu'il y a un moyen de récupérer le chemin du répertoire d'exécution du script, et aussi de parcourir un chemin indépendemment du séparateur utilisé par le système (/ sous linux et \ sous windows) ?
    --
    Sylvain
    0
  7. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Cependant, je ne sais pas quel est le répertoire dans lequel je suis quand je veux exécuter le script

    C'est la variable os.curdir

    et aussi de parcourir un chemin indépendemment du séparateur utilisé par le système (/ sous linux et \ sous windows) ?

    Prends le slash, ça marche sur les deux systemes.
    0
  8. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    http://www.artofnet.com/index.asp?m=2&z=2&i=54

    os.sep retourne le caractère qui désigne un séparateur de répertoire. Sylvain je veux bien t'aider mais prends au moins le temps au préalable de chercher un minimum sur google s'il te plaît.

    Bonne chance
    0
  9. Ssylvainsab Messages postés 2892 Statut Modérateur 825
     
    Je réponds tard à ce topic, désolé, mais je ne l'ai pas laissé tombé.
    Merci donc à tous pour vos réponses.

    Pour le moment, j'ai opté pour : execfile('./configurations-resolues/'+type_jeu+'.py')
    et ça semble fonctionner sous Linux. Je n'ai pas encore testé sous Windows.
    --
    Sylvain
    0
  10. madprog
     
    La solution est expliquée ici : http://www.python.org/doc/2.5.2/ref/exec.html
    Et plus précisément, cette phrase : "The first expression should evaluate to either a string, an open file object, or a code object."

    En français, ça nous donne : "La première expression devrait être évaluée soit à une chaîne de caractères, soit à un objet file ouvert, soit à un objet code".

    Une chaîne de caractères sera exécutée directement (par exemple, print 'Hello' affichera Hello à l'écran).
    Le contenu d'un fichier ouvert ou d'un objet code sera exécuté.

    Une syntaxe correcte (et qui devrait fonctionner sur toutes les architectures) serait donc :
    exec file('configurations-calculees/'+type_jeu+'.py')
    0