#!/usr/bin/env python # -*- coding: utf-8 -*- # This file is part of IPAACA, the # "Incremental Processing Architecture # for Artificial Conversational Agents". # # Copyright (c) 2009-2015 Social Cognitive Systems Group # CITEC, Bielefeld University # # http://opensource.cit-ec.de/projects/ipaaca/ # http://purl.org/net/ipaaca # # This file may be licensed under the terms of of the # GNU Lesser General Public License Version 3 (the ``LGPL''), # or (at your option) any later version. # # Software distributed under the License is distributed # on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either # express or implied. See the LGPL for the specific language # governing rights and limitations. # # You should have received a copy of the LGPL along with this # program. If not, go to http://www.gnu.org/licenses/lgpl.html # or write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # The development of this software was supported by the # Excellence Cluster EXC 277 Cognitive Interaction Technology. # The Excellence Cluster EXC 277 is a grant of the Deutsche # Forschungsgemeinschaft (DFG) in the context of the German # Excellence Initiative. from __future__ import division, print_function import sys import ipaaca import traceback def pretty_printed_time(t): if t<0: t = -t sign = '-' else: sign = ' ' s = float(t) h = int(s/3600) m = int(s/60) - h*60 s -= h*3600 + m*60 ms = int((s-int(s))*1000) return sign+'%01d:%02d:%02d.%03d'%(h, m, int(s), ms) def modify(key, value, strip=False, pretty_printed_times=False, time_offset=0.0): if key=='time': f = float(value.strip()) - time_offset return pretty_printed_time(f) if pretty_printed_times else str(f) else: return value.strip() if strip else value if __name__=='__main__': try: iap = ipaaca.IpaacaArgumentParser('ipaaca-logcat') iap.add_argument( '-s', '--strip-fields', dest='strip', action='store_true', default=False, help='Strip leading/trailing whitespace from all fields') iap.add_argument( '-p', '--pretty-printed-times', dest='pretty_printed_times', action='store_true', default=False, help='Print human-readable times (hh:mm:ss.ms) instead of float seconds') iap.add_argument( '-d', '--delimiter', dest='delimiter', nargs=1, default=['\t'], help='field delimiter, interpreted as python unicode string (default \'\\t\')') iap.add_argument( '-t', '--align-times', dest='align_times', nargs=2, default=['0', '0'], help='Calculate relative output timestamps (default: 0 0 => keep)\nFirst argument is a reference event timestamp from the log file\nSecond argument is the new output time for that same event') iap.add_argument( '-f', '--fields', dest='fields', default=['time', 'text'], nargs='+', help='fields to print (defaults: \'time\' \'text\')') arguments = iap.parse_args() delimiter = eval("u'"+arguments.delimiter[0]+"'", {"__builtins__":None}, {} ) ref_t, out_t = float(arguments.align_times[0]), float(arguments.align_times[1]) time_offset = ref_t - out_t #print(arguments); sys.exit(1) #modify = (lambda s: s.strip()) if arguments.strip else (lambda s: s) #modify = lambda s: type(s).__name__ for line in sys.stdin: record = eval(line.strip(), {"__builtins__":None}, {} ) print(delimiter.join([modify(f, unicode(record[f]), arguments.strip, arguments.pretty_printed_times, time_offset) for f in arguments.fields])) except (KeyboardInterrupt, SystemExit): pass # ret below except Exception, e: print(u'Exception: '+unicode(traceback.format_exc())) ipaaca.exit(1) ipaaca.exit(0)