On Wed, Jan 02, 2019 at 08:39:53PM +0530, Asad wrote: > Hi All , > > Need advice on the following piece of code :
Let me write it in a more "Pythonic" style: PATCH = r'\?/patch/\d{8}/\d{8}/admin/load.sql' APPLY = r'Starting\s+apply\s+for\s+patch\s+\d{8}/\d{8}' ERROR = r'set_metadata' tail = deque(maxlen=8) # the last eight lines script = None with open("file1.log", 'r') as f: for line in f: tail.append(line) if (re.search(PATCH, line, re.IGNORECASE) or re.search(APPLY, line, re.IGNORECASE): script = line elif re.search(ERROR, line, re.IGNORECASE): print "Reason for error \n", line print "Script:", script print "Tail:\n", tail print " Danger " # Seriously? This is dangerous? break > Now this is printing the last cached line in the variable line . However > I would like to see the following output : > > 1) if it matches the pattern: \?/patch/\d{8}/\d{8}/admin/load.sql then > look for the line "set_metadata" in the file1.log if it finds the pattern > then print the line which matches the pattern > \?/patch/\d{8}/\d{8}/admin/load.sql Where are you looking? *Anywhere* in the log file? Only in the immediate next line? Anywhere forward of the "patch" line? You are looking for two patterns, but does the order they appear, or the distance apart, matter? blah blah blah set_metadata blah blah ... 100 lines ... blah blah blah /patch/ ... admin/load.sql ... 100 lines ... Is that a match? > print last 4 lines of the tail array and exit print tail[-4:] sys.exit() > 2) if it doesnot match '\?/patch/\d{8}/\d{8}/admin/load.sql' > > then look of the anothern pattern > :Starting\s+apply\s+for\s+patch\s+\d{8}/\d{8} if it find the pattern > > then look for line "set_metadata" in the file1.log if it finds the pattern > then print the line which matches the pattern > \?/patch/\d{8}/\d{8}/admin/load.sql This is a contradiction: you just said that it DOESN'T match the patch...load.sql pattern, but now you want it to print the line that matched. There is no line that matches! > 3 ) if it doesnot match the pattern: \?/patch/\d{8}/\d{8}/admin/load.sql > or '\?/patch/\d{8}/\d{8}/admin/load.sql' > > print "No match found refer to install guide" > > Can you advice what I can do to change the code . You need to tighten the specifications to make it more clear what you are trying to do. -- Steve _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor