Définition de fonction via execfile

Le
Eric Masson
'Lut,

Soit une application (un filtre dans le cadre d'un système d'impression
type BSD), contenue dans un seul fichier source, en fonction de
paramètres reçus dans stdin, je dois récupérer des définitions de
fonction dans des fichiers sources externes :

<filtre.py>
def traitement (file, parms):
# blah, blah, blah
# traitement divers et variés sur file
# et création d'un objet quelconque c
if parms['overlay'] <> '' :
fonction_definie_ailleurs(c)

def main():

parameters={}

# Récupération paramètres
textfile, parameters = retrieve_spool_parameters(spoolfile)

# Execution fichier si le paramètre existe
if parameters['overlay'] <> '' :
overlay = '/data/overlays/' + parameters['overlay'] + '.py'
execfile(overlay)

# Traitement
traitement(textfile, parameters)

if __name__ == "__main__":
main()
</filtre.py>

<definition.py>
def fonction_definie_ailleurs(c)
# blah, blah, blah
# Traitement sur c si le paramètre overlay dans stdin était
# definition
</definition.py>

<definition2.py>
def fonction_definie_ailleurs(c)
# blah, blah, blah
# Traitement sur c si le paramètre overlay dans stdin était
# definition2
</definition2.py>

Tant que l'on reste dans la portée de main, fonction définie ailleurs
est définie et connue de l'interpréteur, par contre, l'appel depuis
traitement échoue (changement de portée)

Donc, la question maintenant, est-il possible de contourner ce
comportement et de faire en sorte que fonction_definie_ailleurs soit
définie globalement dans filtre.py et que son code soit chargé
ultérieurement à partir d'un fichier source externe ?

Ou alors est-ce que je devrais me mettre au tricot ?

Merci d'avance

--
D'ailleurs, je me demande a quoi cela sert de "quoter" le texte d'un
autre puisqu'un article a toujours la reference de celui auquel il
repond. Et puis, il y a dejanews. alors.
-+- CB in: <http://www.le-gnu.net> - T'avais qu'à suivre -+-
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Méta-MCI
Le #630224
Bonsoir !

En fait, à l'intérieur d'une fonction, tu veux définir une fonction globale.
Il faut alors adresser directement globals()

Exemple :

def ff():
print '00ff'
return '00ff'

def f():
def ff():
print 'ff'
return 'ff'
ff()
globals()['ff']ÿ
print 'f'
return 'f'

ff()
f()
ff()




@+

MCI
Eric Masson
Le #630012
"Méta-MCI"
'Lut,

En fait, à l'intérieur d'une fonction, tu veux définir une fonction globale.
Il faut alors adresser directement globals()


Ok, je n'avais pas pensé à ça pour les fonctions.

Exemple :

def ff():
print '00ff'
return '00ff'

def f():
def ff():
print 'ff'
return 'ff'
ff()
globals()['ff']ÿ
print 'f'
return 'f'

ff()
f()
ff()


Je teste quelque chose dans cet esprit dès que possible.

Merci

--
Ce message de Marc n'avait rien à faire sur ma boite privé sans MON
autorisation s'il le fait c'est à ses risques et périls, il a gravement
violé la nétiquette, un prêté pour un rendu.
-+- 0QI in GNU : J'irais bien refaire un tour du côté de chez spam -+-

Publicité
Poster une réponse
Anonyme