![]() |
[Python] Modifier des fonctions pendant le programme - Version imprimable +- N-PN White-Hat Project (https://dev.n-pn.fr/forum) +-- Forum : Programmation (https://dev.n-pn.fr/forum/forumdisplay.php?fid=72) +--- Forum : Langages interprétés (https://dev.n-pn.fr/forum/forumdisplay.php?fid=27) +--- Sujet : [Python] Modifier des fonctions pendant le programme (/showthread.php?tid=2488) |
[Python] Modifier des fonctions pendant le programme - InstinctHack - 10-12-2012 Bonjour à tous ![]() Je m'amuse de nouveau avec mon bot irc, mais ça commencer à me taper sur le système de devoir reload à chaque modif, j'aimerais donc pouvoir surcharger les fonctions dans le temps. Je n'ai pas trouver de solution sur internet, alors j'ai commencer à bidouiller un script... Code PYTHON :
Mon fichier lib.py Code PYTHON :
Donc résultat c'est fonctionnel la fonction change bien, mais il faut qu'elle soit dans le fichier lanceur, donc c'est pas ce que je veut, je n'ai pas réussit à utiliser eval et del ne semble pas marcher... Avez-vous une idée pour pouvoir faire ça ? RE: [Python] Modifier des fonctions pendant le programme - supersnail - 10-12-2012 Personnellement, je ne pense pas que tu puisses relancer le mainfile directement... Pour ma part (ce que j'ai fait avec Canard_WC & ProjectBot) c'est un core qui se contente juste de gérer la connexion au serveur IRC, de recevoir les messages, les envoyer et de dispatch des évènements lorsqu'un message est reçu/envoyé/etc. Toutes les features du bot se retrouvent donc dans des fichiers séparés, contenant une fonction module_init chargée d'enregistrer un callback pour les évènements à traiter, et une fonction module_unload qui va supprimer les callback enregistrés par module_init. Ainsi module_init se retrouve appelé après le chargement du module, et module_unload appelé avant le déchargement du module (et je définis une liste de modules à charger au démarrage du bot) ![]() RE: [Python] Modifier des fonctions pendant le programme - spin - 10-12-2012 Il existe des techniques pour faire du hot swaping (modifier du code à chaud), si c'est ce que tu cherches à faire, et certains langage le permettent même nativement. Python n'a pas l'air d'en faire partie, néanmoins après une petit recherche j'ai trouvé des trucs éventuellement intéressants : Un topic sur StackExchange où l'OP propose une solution : http://stackoverflow.com/questions/6751263/hot-swapping-of-python-running-program (la dernière réponse peut aider je pense). Un module Python pour gérer le hot swapping : http://pypi.python.org/pypi/hotswap/0.1 |