我的命令行实用程序应该接受相互连接的几个过滤器(类似于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

在这里,我尝试链接四个过滤器子命令: scriptchaintranformationtranformation . 但是Python argparse (貌似)不支持在一个命令行中使用多个子命令 .

那么如果不是 argparse 那么用什么库来处理这样的命令行呢?

我的问题:

  • 这些命令行有哪些用户友好的格式?

  • 如何用Python argparse 解析它?

  • 如果不是 argparse ,那又是什么呢?

另请注意,将来我可能会决定使用其他语言(可能是D)而不是Python来重写我的软件 .