• STATISTIQUES
  • Il y a eu un total de 4 membres et 5407 visiteurs sur le site dans les dernières 24h pour un total de 5 411 personnes!


    2 membres se sont inscrits dans les dernières 24h!


    Membres: 2 608
    Discussions: 3 580
    Messages: 32 820
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [EN] CS Tutoring Center
    Site de challenge spécialisé dans les challenges de programmation C++ et java cependant, d'autres langages pe...
    Challenges
    [FR] Hackfest
    Le Hackfest est un évènement de sécurité et de piratage informatique au Québec reg...
    Hacking
    [FR] apprendre-a-manipuler
    Site d'apprentissage de la manipulation d'autrui.
    Hacking
    [FR] Root-me
    Script: 5, Système: 20, Cracking: 16, Cryptanalyse: 17, Programmation: 8, Réaliste: 11, Réseau: 10, Stéganog...
    Challenges
    [FR] µContest
    µContest est un site de challenges de programmation, c'est à dire qu'il propose des épreu...
    Hacking
    [EN] Rosecode
    Programming: 36, Math: 29, Probability: 5, Sequence: 7, Crypto: 4, Brainf**k: 13, TimeRace: 4, Hack: 9
    Challenges
    [FR] Newbie Contest
    Crackme: 35, Cryptographie: 49, Hacking: 27, Javascript/Java: 17, Logique: 31, Programmation: 23, Stéganographie: 53
    Challenges

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[Python] Modifier des fonctions pendant le programme
10-12-2012, 12h14
Message : #1
InstinctHack Hors ligne
Posting Freak
*



Messages : 1,366
Sujets : 184
Points: 299
Inscription : Dec 2011
[Python] Modifier des fonctions pendant le programme
Bonjour à tous Smile
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 :

    #/usr/bin/python python
    # -*- coding: utf-8 -*-
     
    #ceci est la technique classique d'inclusion
    #import lib
     
    print 'démarrage du programme'
     
    print "\t"+'Inclusion des librairies en cours...'
     
    import time
    import threading
    import os
     
    print "\t"+'Inclusion des librairies terminées.'
     
    def maj_simple():
        while True:
            print "\t"+'démarrage de la fonction de mise à jour simple'
     
            def test():
                    print '1'
            print 'Fonction test première déclaration'
            time.sleep(5)
            def test():
                print '2'
            print 'Fonction test deuxième déclaration'
            global test
            time.sleep(5)
     
    def maj_complexe():
        global lib
     
        while True:
            print 'mise à jour'
    #        if os.path.isfile('lib.pyc'):
     #          os.remove('lib.pyc')
            global lib
            del(lib)
            import lib as lib
            global lib
            time.sleep(5)
        lib.send_data()
     
    def boucle():
        global lib
        while True:
            test()
    #        lib.send_data()
            time.sleep(1)
     
    threading.Thread(None,maj_simple   ,None,(),{}).start()
    time.sleep(2)    
#    threading.Thread(None,maj_complexe   ,None,(),{}).start()
 #   time.sleep(2)
    threading.Thread(None,boucle,None,(),{}).start()
     
#    fichier = open("lib.py", "r")
#    toutesleslignes = fichier.readlines()
 #   print toutesleslignes
 #   function=eval("print 'envoi des données en ecours...'")
 #   function()
#    fichier.close()
     
 


Mon fichier lib.py
Code PYTHON :

#/usr/bin/python python
# -*- coding: utf-8 -*-
     
def send_data():
       print 'envoi des données en ecours...'
print "Inclusion du fichier lib.pdy"
 


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 ?
Citation :un jour en cours de java j'ai attrapé les seins d'une fille mais elle m'a frappé en disant "c'est privé !!"
j'ai pas compris pourquoi, je croyais qu'on était dans la même classe
+1 (0) -1 (0) Répondre
10-12-2012, 12h21
Message : #2
supersnail Hors ligne
Éleveur d'ornithorynques
*******



Messages : 1,610
Sujets : 72
Points: 466
Inscription : Jan 2012
RE: [Python] Modifier des fonctions pendant le programme
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) Wink
Mon blog

Code :
push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp

"VIM est merveilleux" © supersnail
+1 (1) -1 (0) Répondre
10-12-2012, 19h58
Message : #3
spin Hors ligne
Contributeur
*****



Messages : 325
Sujets : 15
Points: 38
Inscription : Nov 2011
RE: [Python] Modifier des fonctions pendant le programme
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/67512...ng-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
+1 (1) -1 (0) Répondre


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  [Python]Situer mon niveau. InforMods 19 907 10-11-2016, 00h03
Dernier message: ZeR0-@bSoLu
  [PYTHON] un bot IRC basique darcosion 1 185 13-06-2016, 20h40
Dernier message: Yttrium
  [python] ANBU ::: TCP Session Hunter St0rn 2 231 25-02-2016, 18h45
Dernier message: otherflow
  [Python] Une autre façon de gérer les Virtualenv et Packages thxer 2 127 18-01-2016, 12h06
Dernier message: thxer
  [Python] rot script ark 9 428 08-03-2015, 00h37
Dernier message: ark
  [Python] Todo Manager ark 5 300 03-03-2015, 10h55
Dernier message: ark
  [python] Un décorateur pour inventorier les objets b0fh 1 198 04-12-2014, 17h50
Dernier message: thxer
  [python] UPnP Scanner St0rn 2 179 29-10-2014, 14h50
Dernier message: St0rn
  [python] Buffer Overflow : EBP et EIP St0rn 0 141 25-10-2014, 12h58
Dernier message: St0rn
  [Python] QuickHex thxer 9 389 15-08-2014, 20h26
Dernier message: sakiir

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut