#!/usr/bin/python import os import sys def usage(retval): pass def do_file(file_): # Note that we assume the file ends in a newline step_back = 1 while True: file_.seek(- step_back * 3 * 80, os.SEEK_END) data = file_.read() lines = data.split('\n') if lines[2:]: print lines[-4] return else: step_back += 1 def do_pipe(): lines = [] for line in sys.stdin: lines.append(line) if lines[3:]: del lines[0] print lines[0] def main(): filename = '' while sys.argv[1:]: if sys.argv[1] == '--file': filename = sys.argv[2] del sys.argv[2] elif sys.argv[1] in [ '-h', '--help' ]: usage(0) else: sys.stderr.write('%s: Unrecognized option: %s\n' % (sys.argv[0], sys.argv[1])) usage(1) del sys.argv[1] if filename: with open(filename, 'r') as file_: do_file(file_) else: try: # Test if we can seek - if we can, there's a fast way sys.stdin.seek(0, os.SEEK_SET) except IOError: # We cannot seek, so read the whole "file" do_pipe() else: # We can seek; this is probably a < redirect - do things the fast way do_file(sys.stdin) main()