为了账号安全,请及时绑定邮箱和手机立即绑定

在命令行中链接多个带有选项的转换

在命令行中链接多个带有选项的转换

心有法竹 2021-09-11 10:37:12
我的命令行实用程序应该接受几个相互连接的过滤器(类似于 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条经验 获得超7个赞

管道应该作为我的程序的单个参数(其中可能有空格,例如使用 shell 引用)提供。

管道可以被+s分割成几个过滤器,也就是正则\s+\+\s+表达式。但是,在拆分引用+\+) 时应被忽略。

然后每个过滤器都作为单独的命令行处理(例如使用argparse)。在传递给argparse每个过滤器之前,应在原因空间上拆分。

此外,\引用空格(以便过滤器不会在此空格处拆分)和它本身 ( \\)。

请注意,通过调用 shell 管道sh -c 'tr a-z A-Z | tac'(此处管道是sh程序的单个参数)暗示将管道作为单个参数提供。


查看完整回答
反对 回复 2021-09-11
  • 1 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信