#! /usr/bin/env python

import argparse
import sys
import time

def process_lines(in_file, out_file, fmt="%Y-%m-%d %H:%M:%S: "):
	"""
	Reads lines from a file-like object in_file, prefixes them
	with a timestamp according to the provided format,
	and writes them into the file-like object out_file.
	
	Typically in_file is stdin, out_file is stdout.
	"""
	
	for line in in_file:
		out_file.write(time.strftime(fmt, time.localtime()) + line)
		out_file.flush()

if __name__ == "__main__":
	# parse command line args
	parser = argparse.ArgumentParser(description="Annotate lines with timestamps")
	parser.add_argument("-i", "--infile", help="Input file, defaults to stdin")
	parser.add_argument("-o", "--outfile", help="Output file, defaults to stdout")
	parser.add_argument("-f", "--format", help="Timestamp format (strftime style)", default="%Y-%m-%d %H:%M:%S: ")
	args = parser.parse_args()
	
	# process lines
	process_lines(
		open(args.infile) if args.infile else sys.stdin,
		open(args.outfile, "w") if args.outfile else sys.stdout,
		args.format
	)
