Я борюсь с разбором командной строки и argparse, как обрабатывать глобальные переменные, подкоманды и необязательные параметры для этих подкоманд
Я пишу оболочку python3 вокруг python-libvirt для управления моими виртуальными машинами.Оболочка будет обрабатывать создание, удаление, остановку / запуск, снимки и т. Д.
Ниже приведен неполный список параметров, который показывает различные способы передачи параметров в мой сценарий:
# Connection option for all commands:
# ---
# vmman.py [-c hypervisor] (defaults to qemu:///system)
# Generic VM commands:
# ---
# vmman.py show : list all vms, with their state
# vmman.py {up|down|reboot|rm} domain : boots, shuts down, reboots
or deletes the domain
# Snapshot management:
# ---
# vmman.py lssnap domain : list snapshots attached to domain
# vmman.py snaprev domain [snapsname] : reverts domain to latest
snapshot or to snapname
# Resource management:
# ---
# vmman.py domain resdel [disk name] [net iface]
А потом какой-то код, используемый для тестирования первой подкоманды:
def setConnectionString(args):
print('Arg = %s' % args.cstring)
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
parserConnect = subparsers.add_parser('ConnectionURI')
parserConnect.set_defaults(func=setConnectionString)
parserConnect.add_argument('-c', '--connect', dest='host')
args = parser.parse_args()
args.func(args)
print("COMPLETED")
Теперь документ argparse () на docs.python.org довольно плотный и немного запутывает новичка в Python, как и я ...Я ожидал, что результат будет примерно таким:
`Arg = oslo`
Что я получу:
[10:21:40|jfgratton@bergen:kvmman.py]: ./argstest.py -c oslo
usage: argstest.py [-h] {ConnectionURI} ...
argstest.py: error: invalid choice: 'connectionURI' (choose from 'ConnectionURI')
Я явно что-то пропускаю, и я тестирую только то, что, как я думал,быть самым простым из всех (глобальный параметр);еще даже не понял, как обрабатывать необязательные подпункты и все такое.