Моя утилита командной строки должна принимать несколько фильтров, связанных друг с другом (аналогично конвейеру Unix).
Каждый фильтр имеет несколько параметров.Например, фильтр chain
в настоящее время имеет следующие параметры:
-t NAMESPACE, --target NAMESPACE
target namespace(s)
-s {precedence,doc}, --next-script {precedence,doc}
"next script" algorithm ("precedence" is not
supported)
-n {ignore,remove,error}, --not-in-target {ignore,remove,error}
what if a result is not in target NS
-u URL, --universal-precedence URL
universal precedence
-W {inverseofsum,sumofinverses}, --weight-formula {inverseofsum,sumofinverses}
formula for weighting scripts
Как представить в аргументах команды рабочий процесс фильтров?
Первая мысль - использовать массив JSON.Но JSON не совсем хороший формат для командной строки.
Следующая мысль - разделить фильтры с помощью некоторого разделителя.Это может быть --
или --separator
или как это.Но --
уже используется для отделения параметров командной строки от других аргументов командной строки, и --separator
выглядит не очень хорошо.
Другая проблема заключается в том, что, хотя я использую Python 3 argparse
, этот пакет, похоже, нехорошо подходит для нескольких подкоманд, связанных в одну командную строку, например:
boiler script filter1 --separator \
chain -t http://www.w3.org/1999/xhtml -n error --separator \
transformation filter2 --arg x=y --separator \
transformation filter3
Здесь я попытаюсь объединить четыре подкоманды фильтра: script
, chain
, tranformation
, tranformation
.Но Python argparse
(похоже) не поддерживает наличие нескольких подкоманд в одной командной строке.
Так что, если не argparse
, то какую библиотеку использовать для обработки командных строк, подобных этой?
Myвопросы:
- Каковы возможные удобные форматы для таких командных строк?
- Как разобрать его с Python
argparse
? - Если нет
argparse
тогда что вместо этого?
Также обратите внимание, что в будущем я могу решить переписать свое программное обеспечение на другом языке ( D , вероятно), чем Python.