2010-04-29 15 views
1

J'ai écrit un script python pour scanner le wifi et envoyer des données au serveur, j'ai défini la valeur d'intervalle, donc il continue à numériser et envoyer les données, il lit à partir du fichier config.txt J'ai mis la valeur d'intervalle pour balayer, j'ajoute également oui/non dans mon fichier de configuration, ainsi "non" il balaye seulement une fois et si "oui" il balayera selon le niveau d'intervalle,problème de script python une fois construit et le package

mon code comme ci-dessous

import time,..... 

from threading import Event, Thread 

class RepeatTimer(Thread): 
    def __init__(self, interval, function, iterations=0, args=[], kwargs={}): 
     Thread.__init__(self) 
     self.interval = interval 
     self.function = function 
     self.iterations = iterations 
     self.args = args 
     self.kwargs = kwargs 
     self.finished = Event() 

    def run(self): 
     count = 0 
     while not self.finished.is_set() and (self.iterations <= 0 or count < self.iterations): 
      self.finished.wait(self.interval) 
      if not self.finished.is_set(): 
       self.function(*self.args, **self.kwargs) 
       count += 1 

    def cancel(self): 
     self.finished.set() 

    def scanWifi(self): 
     #scanning process and sending data done here 


obj = JW() 
if status == "yes": 
    t = RepeatTimer(int(intervalTime),obj.scanWifi) 
    t.start() 
else: 
    obj.scanWifi() 

une fois que j'emballer mon code, sa seule course quand je mis mon fichier de configuration réglé sur « non » où il analyse une fois seulement, mais quand je mets mon fichier de configuration pour « oui », il n'y a pas de progrès du tout, donc je foun d qu'il ya problème avec mon RepeatTimer de classe (minuterie) construire une fois, mais ne savent pas comment résoudre

quelqu'un peut me aider

grâce

Répondre

0

Je pense que le problème est dans la condition de la boucle. En supposant que is_set() renvoie False, la deuxième partie est toujours False. Alors que intervalTime n'est pas connu, je pense qu'il est positif (a un sens un intervalle de temps négatif?) Et count n'est jamais inférieur à self.iterations: ils sont tous les deux 0.

Mais le code que vous avez posté est trop peu, il n'est pas donné de savoir exactement comment fonctionne.

while not self.finished.is_set() and (self.iterations <= 0 or count < self.iterations):