Вот версия, использующая argparse
и 3 позиционных аргумента:
import argparse
import sys
def function1(input, output):
print(f'1: {input} to {output}')
def function2(input, output):
print(f'2: {input} to {output}')
adict = {'runfunction1': function1, 'runfunction2': function2}
parser = argparse.ArgumentParser()
parser.add_argument('cmd', choices=adict)
parser.add_argument('input')
parser.add_argument('output')
args = parser.parse_args()
print(sys.argv[1:])
print(args)
adict[args.cmd](args.input, args.output)
Некоторые примеры прогонов:
1445:~/mypy$ python3 stack54614049.py -h
usage: stack54614049.py [-h] {runfunction1,runfunction2} input output
positional arguments:
{runfunction1,runfunction2}
input
output
optional arguments:
-h, --help show this help message and exit
1445:~/mypy$ python3 stack54614049.py
usage: stack54614049.py [-h] {runfunction1,runfunction2} input output
stack54614049.py: error: the following arguments are required: cmd, input, output
1446:~/mypy$ python3 stack54614049.py foo
usage: stack54614049.py [-h] {runfunction1,runfunction2} input output
stack54614049.py: error: argument cmd: invalid choice: 'foo' (choose from 'runfunction1', 'runfunction2')
1446:~/mypy$ python3 stack54614049.py runfunction1 in out
['runfunction1', 'in', 'out']
Namespace(cmd='runfunction1', input='in', output='out')
1: in to out
1446:~/mypy$ python3 stack54614049.py runfunction2 in out
['runfunction2', 'in', 'out']
Namespace(cmd='runfunction2', input='in', output='out')
2: in to out
С 3 необходимыми позиционными аргументами, как этот argparse
несделать намного более интересный разбор, чем смотреть
cmd, input, output = sys.argv[1:]
С choices
он возражает, если строка cmd
отсутствует в утвержденном списке.Это добавляет help
дисплей.Делегирование строки cmd
в функцию использует своего рода отображение.