
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))