[Distutils] Creating Dynamic Command Line Options from Python Egg Plugins

Michael Hoffman b3i4old02 at sneakemail.com
Thu Feb 21 02:13:00 CET 2008


Noah Gift wrote:
> Has anyone created a command line tool, using optparse, that  
> dynamically creates options from available eggs/plugins?  I have a  
> need to create such a tool, and was looking for an example.

Yeah, I did something like this, which is somewhat clunky:

def parse_options(args):
     usage = """%prog [OPTION...] MODEL SEQFILE OUTFILE
        %prog [OPTION...] --driver=DRIVER MODEL SEQFILE 
[DRIVEROPTIONS...]"""
     version = "%%prog %s" % __version__
     parser = OptionParser(usage=usage, version=version)
     parser.disable_interspersed_args()


     with OptionGroup(parser, "Output driver") as group:
         group.add_option("-d", "--driver", default="DEFAULT",
                          help="set output format")

         group.add_option("--driver-help", action="store_true",
                          help="get driver-specific help")

     options, args = parser.parse_args(args)

     if options.driver_help:
         driver_class = driver_load(options.driver)
         driver_class.print_help()
         sys.exit(0)

def driver_load(name):
     return load_entry_point("myproject", "myproject.drivers", name)

And I defined the entry points in my setup.py file:

====
[myproject.drivers]
DEFAULT = myproject.driver.hdf5:HDF5Driver
hdf5 = myproject.driver.hdf5:HDF5Driver
sql = myproject.driver.sql:SQLDriver
====

At some point I pass unprocessed args to the entry point, which parse 
them with optparse. I could call the program like this:

myproject --driver=sql model seqfile --database=server.example.net



More information about the Distutils-SIG mailing list