我的命令行实用程序应该接受几个相互连接的过滤器(类似于 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那么使用什么库来处理这样的命令行?我的问题:这些命令行有哪些可能的用户友好格式?如何用 Python 解析它argparse?如果不是argparse,那又是什么?另请注意,将来我可能会决定用Python 以外的其他语言(可能是D语言)重写我的软件。
1 回答

弑天下
TA贡献1818条经验 获得超8个赞
管道应该作为我的程序的单个参数(其中可能有空格,例如使用 shell 引用)提供。
管道可以被+
s分割成几个过滤器,也就是正则\s+\+\s+
表达式。但是,在拆分引用+
( \+
) 时应被忽略。
然后每个过滤器都作为单独的命令行处理(例如使用argparse
)。在传递给argparse
每个过滤器之前,应在原因空间上拆分。
此外,\
引用空格(以便过滤器不会在此空格处拆分)和它本身 ( \\
)。
请注意,通过调用 shell 管道sh -c 'tr a-z A-Z | tac'
(此处管道是sh
程序的单个参数)暗示将管道作为单个参数提供。
添加回答
举报
0/150
提交
取消