docs: def main(argv=None):
      """Command line usage main function."""
      if float(sys.version[0:3]) < 2.6:
          print("This script requires Python version 2.6 or better.")
          print("This is Python version %s" % sys.version)
          return 0
      if argv is None:
          argv = sys.argv
  
      import re
      import optparse
  
      search_doc = lambda r, d: re.search(r, __doc__).group(1) if __doc__ else d
      parser = optparse.OptionParser(
          usage="usage: %prog [options] path",
          description=search_doc("\n\n([^|]*?)\n\n", ''),
          version="%%prog %s" % search_doc(":Version: (.*)", "Unknown"))
      opt = parser.add_option
      opt('-p', '--page', dest='page', type='int', default=-1,
          help="display single page")
      opt('-s', '--series', dest='series', type='int', default=-1,
          help="display series of pages of same shape")
      opt('--noplot', dest='noplot', action='store_true', default=False,
          help="don't display images")
      opt('--interpol', dest='interpol', metavar='INTERPOL', default='bilinear',
          help="image interpolation method")
      opt('--dpi', dest='dpi', type='int', default=96,
          help="set plot resolution")
      opt('--debug', dest='debug', action='store_true', default=False,
          help="raise exception on failures")
      opt('--test', dest='test', action='store_true', default=False,
          help="try read all images in path")
      opt('--doctest', dest='doctest', action='store_true', default=False,
          help="runs the internal tests")
      opt('-v', '--verbose', dest='verbose', action='store_true', default=True)
      opt('-q', '--quiet', dest='verbose', action='store_false')
  
      settings, path = parser.parse_args()
      path = ' '.join(path)
  
      if settings.doctest:
          import doctest
          doctest.testmod()
          return 0
      if not path:
          parser.error("No file specified")
      if settings.test:
          test_tifffile(path, settings.verbose)
          return 0
  
      print("Reading file structure...", end=' ')
      start = time.time()
      try:
          tif = TIFFfile(path)
      except Exception as e:
          if settings.debug:
              raise
          else:
              print("\n", e)
              sys.exit(0)
      print("%.3f ms" % ((time.time()-start) * 1e3))
  
      if tif.is_ome:
          settings.norgb = True
  
      images = [(None, tif[0 if settings.page < 0 else settings.page])]
      if not settings.noplot:
          print("Reading image data... ", end=' ')
          notnone = lambda x: next(i for i in x if i is not None)
          start = time.time()
          try:
              if settings.page >= 0:
                  images = [(tif.asarray(key=settings.page),
                             tif[settings.page])]
              elif settings.series >= 0:
                  images = [(tif.asarray(series=settings.series),
                             notnone(tif.series[settings.series].pages))]
              else:
                  images = []
                  for i, s in enumerate(tif.series):
                      try:
                          images.append(
                              (tif.asarray(series=i), notnone(s.pages)))
                      except ValueError as e:
                          images.append((None, notnone(s.pages)))
                          if settings.debug:
                              raise
                          else:
                              print("\n* series %i failed: %s... " % (i, e),
                                    end='')
              print("%.3f ms" % ((time.time()-start) * 1e3))
          except Exception as e:
              if settings.debug:
                  raise
              else:
                  print(e)
      tif.close()
  
      print("\nTIFF file:", tif)
      print()
      for i, s in enumerate(tif.series):
          print ("Series %i" % i)
          print(s)
          print()
      for i, page in images:
          print(page)
          print(page.tags)
          if page.is_palette:
              print("\nColor Map:", page.color_map.shape, page.color_map.dtype)
          for attr in ('cz_lsm_info', 'cz_lsm_scan_information',
                       'mm_uic_tags', 'mm_header', 'nih_image_header'):
              if hasattr(page, attr):
                  print("", attr.upper(), Record(getattr(page, attr)), sep="\n")
          print()
  
      if images and not settings.noplot:
          try:
              import matplotlib
              matplotlib.use('TkAgg')
              from matplotlib import pyplot
          except ImportError as e:
              warnings.warn("failed to import matplotlib.\n%s" % e)
          else:
              for img, page in images:
                  if img is None:
                      continue
                  vmin, vmax = None, None
                  if page.is_stk:
                      try:
                          vmin = page.mm_uic_tags['min_scale']
                          vmax = page.mm_uic_tags['max_scale']
                      except KeyError:
                          pass
                      else:
                          if vmax <= vmin:
                              vmin, vmax = None, None
                  title = "%s\n %s" % (str(tif), str(page))
                  imshow(img, title=title, vmin=vmin, vmax=vmax,
                         bitspersample=page.bits_per_sample,
                         photometric=page.photometric,
                         interpolation=settings.interpol,
                         dpi=settings.dpi)
              pyplot.show()