Traits CLI is based on Enthought's Traits library.
Some benefits:
- Automatically set type (int/float/...) of command line argument.
- Help string generation.
- "Deep value"" configuration: e.g.,
--dict['a']['b']['c']=1
is equivalent toobj.dict['a']['b']['c'] = 1
in Python code. - Nested class configuration: e.g.,
--sub.attr=val
is equivalent toobj.sub.attr = val
in Python code. - Parameter file support (ini/conf, json, yaml, etc.). Load parameter from file then set attribute.
- Documentaions (at Read the Docs)
- Source code repository (at GitHub)
- Issue tracker (at GitHub)
- PyPI
- Travis CI
pip install traitscli
- traits
- argparse (for Python < 2.7)
Source code:
from traitscli import TraitsCLIBase
from traits.api import Bool, Float, Int, Str, Enum
class SampleCLI(TraitsCLIBase):
'''
Sample CLI using `traitscli`.
Example::
%(prog)s --yes # => obj.yes = True
%(prog)s --string something # => obj.string = 'string'
%(prog)s --choice x # => raise error (x is not in {a, b, c})
'''
# These variables are configurable by command line option
yes = Bool(desc='yes flag for sample CLI', config=True)
no = Bool(True, config=True)
fnum = Float(config=True)
inum = Int(config=True)
string = Str(config=True)
choice = Enum(['a', 'b', 'c'], config=True)
# You can have "internal" attributes which cannot be set via CLI.
not_configurable_from_cli = Bool()
def do_run(self):
names = self.class_trait_names(config=True)
width = max(map(len, names))
for na in names:
print "{0:{1}} : {2!r}".format(na, width, getattr(self, na))
if __name__ == '__main__':
# Run command line interface
SampleCLI.cli()
Example run:
$ python sample.py --help
usage: sample.py [-h] [--choice {a,b,c}] [--fnum FNUM] [--inum INUM] [--no]
[--string STRING] [--yes]
Sample CLI using `traitscli`.
Example::
sample.py --yes # => obj.yes = True
sample.py --string something # => obj.string = 'string'
sample.py --choice x # => raise error (x is not in {a, b, c})
optional arguments:
-h, --help show this help message and exit
--choice {a,b,c} (default: a)
--fnum FNUM (default: 0.0)
--inum INUM (default: 0)
--no (default: True)
--string STRING (default: )
--yes yes flag for sample CLI (default: False)
$ python sample.py --yes --choice a
string : ''
no : True
fnum : 0.0
choice : 'a'
inum : 0
yes : True
$ python sample.py --inum invalid_argument
usage: sample.py [-h] [--choice {a,b,c}] [--fnum FNUM] [--inum INUM] [--no]
[--string STRING] [--yes]
sample.py: error: argument --inum: invalid int value: 'invalid_argument'