python - How can I build sub-commands to bundle scripts that should also work independently? -
python - How can I build sub-commands to bundle scripts that should also work independently? -
i working on research project (my bachelors thesis) handwriting recognition. wrote lot of python scripts far , create them useful other people. created project on pypi: https://pypi.python.org/pypi/hwrt/
currently, 2 executable scripts there: backup.py , view.py. when installed via pip can  phone call them, works:
$ backup.py --help usage: backup.py [-h] [-d folder] [-s] [-o]  download raw   info online server , (e.g. on dropbox) handwriting_datasets.pickle.  optional arguments:   -h, --help            show help message , exit   -d folder, --destination folder                         write handwriting_dataset.pickle                         (default: /home/moose/downloads/write-math/archive                         /raw-datasets)   -s, --small           should  little dataset (with capital letters)                         created? (default: false)   -o, --onlydropbox     don't download new files; upload dropbox                         (default: false)  $ view.py --help usage: view.py [-h] [-i id] [--mysql mysql] [-m folder]  display raw_data_id.  optional arguments:   -h, --help            show help message , exit   -i id, --id id        raw_data_id want?   --mysql mysql         mysql configuration should used?   -m folder, --model folder                         model folder (with info.yml)?    i got via scripts in setup.py:
try:     setuptools import setup except importerror:     distutils.core import setup  config = {     'name': 'hwrt',     'version': '0.1.19',     'author': 'martin thoma',     'author_email': 'info@martin-thoma.de',     'packages': ['hwrt'],     'scripts': ['bin/backup.py', 'bin/view.py'],     'url': 'https://github.com/martinthoma/hwrt',     'license': 'mit',     'description': 'handwriting recognition tools',     'long_description': """a tookit handwriting recognition.     developed part of bachelors thesis of martin thoma.""",     'install_requires': [         "argparse",         "theano",         "nose",     ],     'keywords': ['hwrt', 'recognition', 'handwriting', 'on-line'],     'download_url': 'https://github.com/martinthoma/hwrt', }  setup(**config)    however, rather want them called this:
$ hwrt backup --help (just came before 'backup.py --help') $ hwrt view --help (just came before 'view.py --help') $ hwrt --help (a list of sub-commands)    i know can done sub-commands , argparse. however, mean had create new script bundle commands argparse. scripts work independently. feels more logically me adjust command line parameters  of import backup.py in backup.py , not in file.
is there way adjust scripts "discover" scripts in bin folder , add together of them sub-commands?
this might case using using parents.
for example, lets assume both of scripts create parser object when loaded (or have function creates parser):
import argparse backup import parser backup_parser view import parser view_parser  if __name__=='__main__':     parser = argparse.argumentparser()     subparsers = parser.add_subparsers(dest='cmd')     # or  utilize parser.setdefault() described in documentation     backup = subparsers.add_parser('backup', add_help=false, parents=[backup_parser])     view = subparsers.add_parser('view', add_help=false, parents=[view_parser])     args = parser.parse_args()    this should print appropriate helps.  args.cmd identify subcommand, , other attributes respective arguments.  backup subparser clone of parser imported backup.py.  (i haven't tested script there may typos or bugs, gives general idea.)
how handle cli subcommands argparse discusses couple of ways of handling subcommands.
ipython uses argparse handle both main interface, , many of magic commands.  populates parsers arguments , values config files.  way  big number of parameters can set either default configs, customized configs, or on command line.
 python setuptools argparse 
 
  
Comments
Post a Comment