Identification de l'erreur (Script)

Charlie
Identification de l'erreur (Script)

Bonjour fredericmazue,
comment vas-tu?

T'as vu la tête à Sarkozy ce matin aux nouvelles, il avait l'air étourdie : ), je comprends ton empressement à vouloir tourner la page quand on parle de lui (hahaha!), disons je suis pas trop impressioné par le bonhomme hahaha, en plus c'est un ppp(partenaria public privé), vont tous nous appauvrir avec leurs manigeances, je commence à croire en la théorie de la conspiration (voir : The Bilderberg group) ! il a traité son attaché de presse d'imbécile durant son entrevue avec CBS(60 minutes) mais ne t'en fait pas à défaut d'avoir Sarkozy, on a eu Jean Chrétien : )

bon, je retourne à mes moutons...

J'ai presque terminé mon script :D ,

Le script ci-dessous me permet d'entrer mon IP primaire et mes IP secondaires. Ensuite, le ping démarre et tous les pertes de paquets
plus grand que 2% vont ds un fichier: ('c:/tmp/myprimarylogs.xls','w')

Le hic, c'est que je veux ce roulement de ping pour une période de 24 heures et ce, à chaque minute. Malheureusement, ce script ne performe ce ping qu'une seule fois pour toutes les IP et s'arrête ensuite à :

("# Enter Primary IP: ").

Bien entendu, je ne veux pas ce raw_input ("# Enter Primary IP: ").
Tu peux identifier la/les sources de l'erreur ?

Voici mon script ds sa totalité:


import re
import time 
import thread 
import os
import sys


f=open('c:/tmp/primaryip.xls','w')
f.close()

g=open('c:/tmp/workfile.txt','w')
g.close()

h=open('c:/tmp/myprimarylogs.xls','w')
h.close()
 
j=open('c:/tmp/secip.xls','w')
j.close()

def validIP(ipAdd): 
    ipRegex = r"^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$" 
    re_ip = re.compile(ipRegex) 
    return re_ip.match(ipAdd)

def validIP1(ipAdd1): 
    ipRegex = r"^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$" 
    re_ip = re.compile(ipRegex) 
    return re_ip.match(ipAdd1)

def fil(data):
    patt = re.compile(r'\((\d+)% loss\)')
    patt1 = re.compile(r'(\d+.\d+.\d+.\d)')
 
    for line in data.split('\n'):
        
        if line.startswith("Ping statistics for"):
            ip = patt1.search(line).group(1)
            
        if patt.search(line):
            loss_num = int(patt.search(line).group(1))
            
            if loss_num >= 2 :
                s = open('c:/tmp/myprimarylogs.xls', 'a+')
                s.write("%s '%s'\n" % (loss_num, ip))
                s.close()
                # if loss >= 2, return False - then secondary IPs are pinged
                print 'loss_num is >= 2 ', loss_num
                return False
            else:
                print 'loss_num is < 2,', loss_num
                return True

def ping(*fnames):
    g = open(fnames[0], 'w')
    for fn in fnames[1:]:
        f=open(fn, 'r')
        ipList = [line.strip() for line in f.readlines()]
        f.close()
        resList = []
        for ipAdd in ipList:
            pingaling =os.popen("ping %s" %(ipAdd),"r")
            data = pingaling.read()
            resList.append(data)
            # if loss > 2, ping secondary IPs
            proceed = fil(data)
            if proceed:
                break       
        g.write('/n'.join(resList))
        if proceed:
            break
    g.close()
 
def get_IPs(fnP, fnS):
    while True:
        ipAddP = raw_input("# Enter Primary IP: ")
        if validIP(ipAddP):
            f = open(fnP, 'w')
            f.write(ipAddP.strip() + "\n")
            f.close()
            break
        else:
            print "Invalid IP."
    ipList = []
    while True:
        while True:
            ipAddS = raw_input("# Enter Secondary IP: ")
            if validIP(ipAddS):
                ipList.append(ipAddS.strip())
                break
            else:
                print "Invalid IP"
        s = raw_input("# Enter another IP? Y/N: " )
        if s.upper() == "N":
            f = open(fnS, 'w')
            f.write('\n'.join(ipList))
            f.close()
            break
 
fnP = 'c:/tmp/primaryip.xls'
fnS = 'c:/tmp/secip.xls'
fnW = 'c:/tmp/workfile.txt'
 
get_IPs(fnP, fnS)
ping(fnW, fnP, fnS)

def main():
    the_time = time.time()
    start_time = the_time
    end_time = the_time + (60*60*24)  # 24 hrs
    get_IPs(fnP, fnS)
    while the_time < end_time:
        ping(fnW, fnP, fnS)
        time.sleep(60)    # wait 60 seconds
        the_time = time.time() # get the new time
 
 
if __name__ == "__main__":
    main()

fredericmazue

Quote:
get_IPs(fnP, fnS)
ping(fnW, fnP, fnS)

Ces deux lignes juste avant le main, c'est un appel de fonctions. En clair tu fais la saisie d'IP et le ping avant d'entrer dans main, et dans main tu recommences....

Au fait je ne trouve pas normal que les noms de fichiers soient écrits en dur en plusieurs endroits. Le code dupliqué, ce n'est jamais très bon.

Charlie

Bonjour fredericmazue,

merci pour ton conseil, maintenant, ça fonctionne correctement.
J'ai une question pour toi, j'ai fait plusieurs test
avec mon script et il me reste un problème à résoudre...

j'entre plusieurs IP, (mon IP primaire et mes IP secondaires).

ex: 1.1.1.1 (primaire)
et 2.2.2.2 (secondaire)
3.3.3.3 (secondaire)
10.3.4.5 (secondaire)
4.4.4.4(secondaire)

lorsque mon script démarre, le IP primaire est pinger(1.1.1.1), puisque les pertes de paquets sont plus grand que 2% , alors, les ip secondaires sont ensuite pinger ds cette suite: 2.2.2.2 et les résultats vont ds mon fichier:

'c:/tmp/myprimarylogs.xls'

ensuite, le ip 3.3.3.3 est pinger et les resultats vont ds le même fichier (ci-haut).

Le problème survient lorsque j'atteints 10.3.4.5, les résultas du ping sont plus petit que 2% de perte de paquet alors, mon script recommense à pinger le ip primaire 1.1.1.1 au lieu de continuer sa course pour pinger le 4.4.4.4 ... tu pourrais me dire comment corriger le tir ? Je veux qu'il continue à pinger 4.4.4.4 même si les pertes de paquet sont plus petit que 2% ???

Merci /Charlie

fredericmazue

Tu es insatiable dis donc :)
Sur cette question, je pense que ça ne concerne que la logique pure du script. Par de problème de syntaxe, de fonctionnalités de Python ou autre chose de ce genre, alors il me semble que tu as toutes le sclés en mains pour faire ce que tu veux exactement comme tu le veux :)