Problème de lecture de stdin lors de pipe avec tail -f
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:
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:
cat fichier_log | python -u mon_prog arg1 arg2
Voici mon programme :
Code:
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.