def info_cmd(argv): parser = optparse.OptionParser(usage='rosbag info [options] BAGFILE1 [BAGFILE2 BAGFILE3 ...]', description='Summarize the contents of one or more bag files.') parser.add_option('-y', '--yaml', dest='yaml', default=False, action='store_true', help='print information in YAML format') parser.add_option('-k', '--key', dest='key', default=None, action='store', help='print information on the given key') parser.add_option( '--freq', dest='freq', default=False, action='store_true', help='display topic message frequency statistics') (options, args) = parser.parse_args(argv) if len(args) == 0: parser.error('You must specify at least 1 bag file.') if options.key and not options.yaml: parser.error('You can only specify key when printing in YAML format.') for i, arg in enumerate(args): try: b = Bag(arg, 'r', skip_index=not options.freq) if options.yaml: info = b._get_yaml_info(key=options.key) if info is not None: print info else: print b b.close() if i < len(args) - 1: print '---' except ROSBagUnindexedException, ex: print >> sys.stderr, 'ERROR bag unindexed: %s. Run rosbag reindex.' % arg except ROSBagException, ex: print >> sys.stderr, 'ERROR reading %s: %s' % (arg, str(ex))
def bag_op(inbag_filenames, allow_unindexed, copy_fn, op, output_dir=None, force=False, quiet=False): for inbag_filename in inbag_filenames: # Check we can read the file try: inbag = Bag(inbag_filename, 'r', allow_unindexed=allow_unindexed) except ROSBagUnindexedException: print >> sys.stderr, 'ERROR bag unindexed: %s. Run rosbag reindex.' % inbag_filename continue except (ROSBagException, IOError), ex: print >> sys.stderr, 'ERROR reading %s: %s' % (inbag_filename, str(ex)) continue # Determine whether we should copy the bag copy = copy_fn(inbag) inbag.close() # Determine filename for output bag if output_dir is None: outbag_filename = inbag_filename else: outbag_filename = os.path.join(output_dir, os.path.split(inbag_filename)[1]) backup_filename = None if outbag_filename == inbag_filename: # Rename the input bag to ###.orig.###, and open for reading backup_filename = '%s.orig%s' % os.path.splitext(inbag_filename) if not force and os.path.exists(backup_filename): if not quiet: print >> sys.stderr, 'Skipping %s. Backup path %s already exists.' % ( inbag_filename, backup_filename) continue try: if copy: shutil.copy(inbag_filename, backup_filename) else: os.rename(inbag_filename, backup_filename) except OSError, ex: print >> sys.stderr, 'ERROR %s %s to %s: %s' % ( 'copying' if copy else 'moving', inbag_filename, backup_filename, str(ex)) continue source_filename = backup_filename
def bag_op(inbag_filenames, allow_unindexed, copy_fn, op, output_dir=None, force=False, quiet=False): for inbag_filename in inbag_filenames: # Check we can read the file try: inbag = Bag(inbag_filename, 'r', allow_unindexed=allow_unindexed) except ROSBagUnindexedException: print >> sys.stderr, 'ERROR bag unindexed: %s. Run rosbag reindex.' % inbag_filename continue except (ROSBagException, IOError), ex: print >> sys.stderr, 'ERROR reading %s: %s' % (inbag_filename, str(ex)) continue # Determine whether we should copy the bag copy = copy_fn(inbag) inbag.close() # Determine filename for output bag if output_dir is None: outbag_filename = inbag_filename else: outbag_filename = os.path.join(output_dir, os.path.split(inbag_filename)[1]) backup_filename = None if outbag_filename == inbag_filename: # Rename the input bag to ###.orig.###, and open for reading backup_filename = '%s.orig%s' % os.path.splitext(inbag_filename) if not force and os.path.exists(backup_filename): if not quiet: print >> sys.stderr, 'Skipping %s. Backup path %s already exists.' % (inbag_filename, backup_filename) continue try: if copy: shutil.copy(inbag_filename, backup_filename) else: os.rename(inbag_filename, backup_filename) except OSError, ex: print >> sys.stderr, 'ERROR %s %s to %s: %s' % ('copying' if copy else 'moving', inbag_filename, backup_filename, str(ex)) continue source_filename = backup_filename
def info_cmd(argv): parser = optparse.OptionParser( usage='rosbag info [options] BAGFILE1 [BAGFILE2 BAGFILE3 ...]', description='Summarize the contents of one or more bag files.') parser.add_option("-y", "--yaml", dest="yaml", default=False, action="store_true", help="print information in YAML format") parser.add_option("-k", "--key", dest="key", default=None, action="store", help="print information on the given key") (options, args) = parser.parse_args(argv) if len(args) == 0: parser.error('You must specify at least 1 bag file.') if options.key and not options.yaml: parser.error('You can only specify key when printing in YAML format.') for i, arg in enumerate(args): try: b = Bag(arg) if options.yaml: info = b._get_yaml_info(key=options.key) if info is not None: print info else: print b b.close() if i < len(args) - 1: print '---' except ROSBagUnindexedException, ex: print >> sys.stderr, 'ERROR bag unindexed: %s. Run rosbag reindex.' % arg except ROSBagException, ex: print >> sys.stderr, 'ERROR reading %s: %s' % (arg, str(ex))
source_filename = outbag_filename else: source_filename = inbag_filename try: inbag = Bag(source_filename, 'r', allow_unindexed=allow_unindexed) # Open the output bag file for writing try: if copy: outbag = Bag(outbag_filename, 'a', allow_unindexed=allow_unindexed) else: outbag = Bag(outbag_filename, 'w') except (ROSBagException, IOError), ex: print >> sys.stderr, 'ERROR writing to %s: %s' % (outbag_filename, str(ex)) inbag.close() continue # Perform the operation try: op(inbag, outbag, quiet=quiet) except ROSBagException, ex: print >> sys.stderr, '\nERROR operating on %s: %s' % (source_filename, str(ex)) inbag.close() outbag.close() continue outbag.close() inbag.close() except KeyboardInterrupt: