Bonjour à tous,
Mon programme doit surveiller des lignes insérées dans des fichiers de logs et renvoyées celles qui correspondent à une expression régulière. Mon problème est que lorsque je lance mon programme de cette manière, je n'ai pas de lignes en sortie quand j'injecte des lignes dans mon fichier_log :
Sachant que j'ai fait des tests en n'envoyant que des lignes correspondantes à mon expression régulière et que je n'ai pas eu de résultat alors que si je fais la même chose avec cette commande ça marche nickel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part tail -f fichier_log | python -u mon_prog arg1 arg2
Voici mon programme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part cat fichier_log | python -u mon_prog arg1 arg2
Si quelqu'un a une idée sur ce que je ne fais pas correctement ou sur une manière différente de faire ça pourrait grandement m'aider.
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 #!/usr/bin/python -u import sys import re import time if len(sys.argv) != 3: sys.exit("You did not give the two necessary arguments.\nUsage : python ./cvfsparser.py filename VOP") file_name = sys.argv[1] sum_type = sys.argv[2] node_name = "" operation_type = "" operation_counter = "" file_name = file_name.rstrip("\n") sum_type = sum_type.rstrip("\n") for line in sys.stdin: line = line.rstrip("\n") regex="\s%s\sSUMMARY\s\[(\w+)\.\w+\]\s(\w+)\scnt\/(\d+)\s" % sum_type pattern = re.compile(regex) found = pattern.search(line) if found: node_name = found.group(1) operation_type = found.group(2) operation_counter = found.group(3) timestamp = time.time() print "PUTVAL %s.serveur/cvfs-%s/operations-%s %d:%s\n" % (node_name, file_name, operation_type, timestamp, operation_counter)
Merci d'avance.
Partager