• STATISTIQUES
  • Il y a eu un total de 0 membres et 28938 visiteurs sur le site dans les dernières 24h pour un total de 28 938 personnes!
    Membres: 2 605
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] InfoMirmo
    Apprentissage de l'informatique par l'intermédiaire de challenges de sécurité. Venez app...
    Hacking
    [FR] apprendre-a-manipuler
    Site d'apprentissage de la manipulation d'autrui.
    Hacking
    [FR] frameip
    le site de partage des connaissances du monde TCPIP
    Protocole
    [EN] Hack this site
    Basic: 11, Realistic: 17, Application: 18, Programming: 12, Extbasic: 14, Javascript: 7, Stego: 17
    Challenges
    [EN] Astalavista
    JavaScript: 1, Exploit: 2, Crypto: 34, CrackIt: 15, Stegano: 8, Programming: 12, Logic: 36, Special: 6, Science: 4, Info...
    Challenges
    [FR] Le site du zero
    Découvrez gratuitement la programmation (C, C++, PHP, MySQL, XHTML, CSS...), Linux, le Mapping, la modé...
    Programmation
    [FR] PHP Débutant
    Apprendre le PHP par l'exemple, facilement et simplement. Réservé d'abord aux débutants....
    Programmation

  • 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,609
Sujets : 71
Points: 465
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 937 10-11-2016, 00h03
Dernier message: ZeR0-@bSoLu
  [PYTHON] un bot IRC basique darcosion 1 136 13-06-2016, 20h40
Dernier message: Yttrium
  [python] ANBU ::: TCP Session Hunter St0rn 2 222 25-02-2016, 18h45
Dernier message: otherflow
  [Python] Une autre façon de gérer les Virtualenv et Packages thxer 2 117 18-01-2016, 12h06
Dernier message: thxer
  [Python] rot script ark 9 426 08-03-2015, 00h37
Dernier message: ark
  [Python] Todo Manager ark 5 344 03-03-2015, 10h55
Dernier message: ark
  [python] Un décorateur pour inventorier les objets b0fh 1 156 04-12-2014, 17h50
Dernier message: thxer
  [python] UPnP Scanner St0rn 2 177 29-10-2014, 14h50
Dernier message: St0rn
  [python] Buffer Overflow : EBP et EIP St0rn 0 123 25-10-2014, 12h58
Dernier message: St0rn
  [Python] QuickHex thxer 9 418 15-08-2014, 20h26
Dernier message: sakiir

Atteindre :


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