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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
tail -f fichier_log | python -u mon_prog arg1 arg2
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
cat fichier_log | python -u mon_prog arg1 arg2
Voici mon programme :

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)
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.

Merci d'avance.