Python

Python je multiplatformní jazyk oblíbený pro svou jednoduchost a stručnost. Jeho hlavní předností je srozumitelná a čistá syntaxe. Díky své jednoduchosti bývá označován jako jeden z nejvhodnějších programovacích jazyků pro začátečníky.

Argparse je modul pythonu, který dokáže zjednodušit práci s argumenty zadávanými v command line při spouštění skriptů. Kompletní dokumentace je zde.

Modul argparse dokáže extrahovat parametry zadávané v command line, abychom s nimi mohli jednoduše pracovat. Nejzákladnějíší použití argparse s funkcí help a se zobrazením verze:

def example01_without_help():
    import argparse
    parser = argparse.ArgumentParser(description='Example with long option names')
    parser.add_argument('-a', action="store_true", default=False)
    parser.add_argument('-b', action="store", dest="b")
    parser.add_argument('-c', action="store", dest="c", type=int)
    parser.add_argument('--version', action='version', version='%(prog)s 1.0')
    results = parser.parse_args()
    print('%s %s %s' % (results.a,results.b,results.c))

Výstup programu bude vypadat takto:

zsobotka@e5470:/data/git/PYTHON/python/00009_sysargs$ python3 args01.py -h
usage: args01.py [-h] [-a] [-b B] [-c C] [--version]

Example with long option names

optional arguments:
  -h, --help  show this help message and exit
  -a
  -b B
  -c C
  --version   show program's version number and exit

zsobotka@e5470:/data/git/PYTHON/python/00009_sysargs$ python3 args01.py -b 5 -a
True 5 None

Argument store uloží hodnotu, po tom je konvertována do určitého typu. Tohle je defaultní chování, jestliže není specifikovaný žádný další parametr:

def example01():
    import argparse
    parser = argparse.ArgumentParser(add_help=False)
    parser.add_argument('-s', action='store', dest='simple_value',
                    help='Store a simple value')
    parser.add_argument('--version', action='version', version='%(prog)s 1.0')
    results = parser.parse_args()
    print('simple_value     = %s' % results.simple_value)

Argument store_const umožňuje pracovat s konstantami, pokud se použije v argumentu proměnná, uloží se do ní předem definovaný řetězec:

def example02():
    import argparse
    parser = argparse.ArgumentParser(description='Example with long option names')
    parser.add_argument('-c', action='store_const', dest='constant_value',
                    const='ulozen tento string',
                    help='Store a constant value')

    parser.add_argument('--version', action='version', version='%(prog)s 1.0')
    results = parser.parse_args()
    print('constant_value   = %s' % results.constant_value)

Modul také umí ukládat hodnotu boolean, používají se akce store_true a store_false:

def example03():
    import argparse
    parser = argparse.ArgumentParser(description='Example with long option names')
    # misto store_true, jde pouzit store_false:
    parser.add_argument('-b', action='store_true', default=False,
                    dest='boolean_switch',
                    help='Set a switch to true')
    parser.add_argument('--version', action='version', version='%(prog)s 1.0')
    results = parser.parse_args()
    print('boolean_switch   = %s' % results.boolean_switch)

Pokud potřebujeme definovat vstupní parametry do proměnné typu list, používáme append:

def example04():
    import argparse
    parser = argparse.ArgumentParser(description='Example with long option names')
    parser.add_argument('-a', action='append', dest='collection',
                    default=[],
                    help='Add repeated values to a list',
                    )
    parser.add_argument('--version', action='version', version='%(prog)s 1.0')
    results = parser.parse_args()
    print('collection       = %s' % results.collection)

Podobně mužeme použít append_const pro konstanty:

def example05():
    import argparse
    parser = argparse.ArgumentParser(description='Example with long option names')
    parser.add_argument('-A', action='append_const', dest='const_collection',
                    const='value-1-to-append',
                    default=[],
                    help='Add different values to list')
    parser.add_argument('-B', action='append_const', dest='const_collection',
                    const='value-2-to-append',
                    help='Add different values to list')
    parser.add_argument('--version', action='version', version='%(prog)s 1.0')
    results = parser.parse_args()
    print('const_collection = %s' % results.const_collection)

V defaultní konvenci u unixových systému se v příkazech command line používá znménko "-". Nicméně Argparse umí pracovat i s jinou konvencí, například pro znaky "+-/":

def example06():
    import argparse
    parser = argparse.ArgumentParser(description='Example with long option names')
    parser = argparse.ArgumentParser(description='Change the option prefix characters',
                                 prefix_chars='-+/',
                                 )
    parser.add_argument('-a', action="store_false", default=None,
                    help='Turn A off',
                    )
    parser.add_argument('+a', action="store_true", default=None,
                    help='Turn A on',
                    )
    parser.add_argument('//noarg', '++noarg', action="store_true", default=False)

    parser.add_argument('--version', action='version', version='%(prog)s 1.0')
    results = parser.parse_args()
    print('const_collection = %s' % results.a)
    print('noarg            = %s' % results.noarg)

Načtené proměnné můžeme ukládat do námi zvolených typů, stačí zadefinovat proměnnou type:

def example07():
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('-i', type=int)
    parser.add_argument('-f', type=float)
    parser.add_argument('--file', type=argparse.FileType('r'), help='blah blah')

    try:
        print(parser.parse_args())
    except IOError:
        parser.error(str(msg))