IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Stocker le temps grace à time.clock() dans une variable ?!


Sujet :

Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Stocker le temps grace à time.clock() dans une variable ?!
    Bonjour, je me permets une nouvelle fois de faire appel à vos lumiéres et à votre aide.

    Mon problème est le suivant:

    Je travail actuellement sur un Bot irc , (le programme en lui même importe peu ...), je voudrais que celui ci est capable d'interagir avec les évènements serveurs comme un l'entrée d'un utilisateur enfin c'est un detail .
    Aucune connaissance du protocole irc n'est réquise pour mon probléme.
    Je souhaiterais en gros pouvoir "détecter" l'entrée des l'utilisateur à savoir si par exemple il y a plus de trois entrées (join) en moins de 10 secondes celui ci n'est pas voicé ou kicker enfin la méthode importe peu ici c'est la détection et la gestion du timing qui me pose probléme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    temps = 0
    while true :
    .
    .
    .
    .
            if data.find ( 'JOIN' ) != -1: #detection de l'entrée d'un utilisateur
    		print temps
    		if ( temps != 0 and (time.clock() < temps + 10)): #
    			nbrjoin = 0 #on ne rentre jamais ici ici car la condition n'est j'amais vrai : (
    		else :
    			nbrjoin = nbrjoin + 1
    		if nbrjoin > 3:
    			irc.send('PRIVMSG #salon:Join trop important probabilite de clones\n') #c'est toujours vrai au bout de 4 join : (
    		else:
    			nick = data.split ( '!' ) [ 0 ].replace ( ':', '' ) #récupération de son pseudonyme
    			irc.send ( 'MODE #salon +v ' + nick + '\n' ) #on donne la parole à l'utilisateur
     
    	temps=time.clock()
    On peut facilement envisager une utilisation de cette boucle dans une autre utilisation .


    Mon probléme est simple , je pense qu'il vient de time.clock() , lorsque je stock time.clock() dans une variable (temps), il stock le temps processeur à l'instant T et non de maniére dynamique en continuant de compter comme je le voudrais pour pouvoir faire ma comparaison dans le premier IF.
    Lorsque que je fais un print temps dans ma boucle il me renvoie toujours une valeur comprise entre 0.15 ou 0.16 .
    Y'a t il moyen de pouvoir stocker le temps de maniére dynamique ? que celui ci continue de s'incrémenter même dans une variable ? Par dictionnaire ou liste je ne sais pas ou grace au thread ? .. Ou peu être que je n'utilise pas la bonne méthode de gestion du temps (je pense à time() par exemple.)

    J'ai penché une bonne partie de la nuit sur ce soucis sans voir comme résoudre ce soucis de gestion du temps ....

    TOUTES les idées sont évidement les bienvenues peu être que je cherche encore midi à quatorze heures.

    Je vous remercie d'avance pour vos réponses.

  2. #2
    Membre éclairé
    Avatar de parp1
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    829
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 829
    Points : 872
    Points
    872
    Par défaut
    Salut. Je ne sais pas si ca reponds au problème mais si tu stock le temps initiale dans une variable. Ensuite tu stock le temps actuel dans une autre... et tu fais la soustraction des deux.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import time
     
    tempsinit= time.time()
     
    if tempsinit !=0 and time.time() > tempsinit +10:
    traitement 
    Else:
    .....
    J'ai une chose a te dire tu ne vas jamais dans ta boucle car tu mets ta variable temps a zéro. Or dans ta condition de ton if... il doit etre différent de zero... donc ca ne va pas..

    Citation Envoyé par Exodus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    temps = 0
    while true :   #temps=0
    .
    .
    .
    .
            if data.find ( 'JOIN' ) != -1: #detection de l'entrée d'un utilisateur # temps =0
    		print temps # temps = 0
    		if ( temps != 0 and (time.clock() < temps + 10)): #Condition fausse car temps =0
    Je pense que que ta condition temps!=0 est inutile si ce n'est pas le cas peux tu nous dire a quoi elle sert. Enleve ce condition en laissant seulement la deuxieme et dis moi si ca fonctionne.
    [SIZE="2"]Dis moi qui tu suis, je te dirais qui je Hais!
    Heureux est l'étudiant, qui comme la rivière suit son cours sans sortir de son lit

    Mon premier Tutoriel


    A 80% des cas je résouts mon problème en rédigeant une nouvelle discussion, du coup je ne poste que 20% de mes problèmes...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Désolé pour le retard ...
    Hello Parp1 et encore merci pour ta réponse , et désolé pour ma réponse fort tardive ...

    J'ai pas mal avancé sur le sujet depuis et le problème venait effectivement d'une mauvaise utilisation de time (mon algo était tout naze d'ailleurs ..) time.time() comme tu me le conseillais est beaucoup plus approprié (celui ci renvoie le temps universel en seconde) il suffisait donc de comparer deux temps en secondes à chaque join est le tours est joué ... (je dis ça mais bon ...)


    Voilà je code le morceau d'algo ici (attention c'est pas digeste du tout je code un peu avec mes pieds )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    if data.find ( 'JOIN :'+chan ) !=-1:
    		nbrjoin = nbrjoin + 1
    		print nbrjoin
    		jtemps[nbrjoin]= time.time()
    		try :
    			if jtemps[(nbrjoin)] - jtemps[(nbrjoin - 1)] < 10 : 
    				irc.send('PRIVMSG '+chan+' : Probabilité de clones.\n')
    				irc.send('KICK '+chan+' '+nick+' : Probabilité de clones.\n')
    		except:
    			print '.\n'
    		nickjoin[nbrjoin] = nick
    		print nickjoin[nbrjoin]
    		hostjoin[nbrjoin] = fullhost
    		print hostjoin[nbrjoin]
    		if nbrjoin == 3 : 				
    			if (hostjoin[nbrjoin] == hostjoin[(nbrjoin-1)] == hostjoin[(nbrjoin-2)] ) !=-1 :
    				irc.send ('MODE '+chan+' +b '+hostjoin[nbrjoin]+'\n')
    				for i in nickjoin.itervalues():
    					if ( nickjoin[nbrjoin] != nickjoin[(nbrjoin - 1)] != nickjoin[(nbrjoin - 2)] ) !=-1 :
    						irc.send ('KICK '+chan+' '+i+': Mass Join\n')
    			if ( jtemps[nbrjoin] - jtemps[nbrjoin - 2]  ) < 10 : 	#gestion du temps mininum entre 3 join (secondes).
    				irc.send('PRIVMSG '+chan+' :Join trop important probabilite de clones\n')
    				irc.send('KICK '+chan+' '+nick+' : Clones.\n')
    				nbrjoin = 0
    		elif nbrjoin < 3 : 							#en dessous 3  join on voice normalement
    			irc.send ( 'MODE '+chan+' +v ' + nick + '\n' )
    		else:
    			irc.send ( 'MODE '+chan+' +v ' + nick + '\n')
    		try :
    			if jtemps[(nbrjoin)] - jtemps[(nbrjoin - 1)] > 20:  	#si plus de X secondes entre 2 join on RAZ le compteur de join a 0
    				nbrjoin = 0
    				print "Remise du compteur de join à 0"
    		except:
    			print 'Une erreur est intervenu'
    Voilà ce morceau de code fonctionne parfaitement (enfin je crois) vu que je n'ai jamais eu à subir d'attaque. il me semblait tout de même que ça accusait le coup si il y avait trop de join (ça laguait fort !)


    D'ailleurs je propose l'intégralité du code de mon bot IRC Full Python à qui veut , je souhaite lui coller l'étiquette GPL d'ailleurs .


    Celui ci marche parfaitement , il sait se connecter sur un serveur, s'authentifier , voicer en automatique , réponds a des commandes irc , kicker , banir etc ... bref tout les fonctions classique d'un bot mais en Python (et c'est rudement mieux qu'un eggdrop ;p ), je n'ai plus vraiment le temps de l'améliorer et j'ai d'autre projet sur le feu ...

    J'aimerais beaucoup que ce projet déjà avancé trouve une/des personne(s) motivées pour le continuer
    Pour les personnes intéressées me contacter : )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. stocker le résultat d'un sed dans une variable : erreur
    Par ben.IT dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 22/02/2011, 16h35
  2. Stocker la date de la veille dans une variable
    Par weed dans le forum VBScript
    Réponses: 2
    Dernier message: 20/01/2011, 13h53
  3. [Batch] Stocker le contenu d'un fichier dans une variable
    Par grandthor dans le forum Scripts/Batch
    Réponses: 10
    Dernier message: 15/04/2009, 08h47
  4. [RegEx] Stocker le contenu d'un preg_match_all dans une variable
    Par rajaneesh dans le forum Langage
    Réponses: 1
    Dernier message: 08/12/2008, 09h49
  5. Réponses: 11
    Dernier message: 18/07/2006, 13h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo