我正在尝试使用docopt实现HTTPie的CLI,但由于某些原因,我无法将方法optional作为第一个参数。我已经删除了大多数选项来隔离这个问题。
此外,HTTPie获取请求项的作者使用docopt文档的方式似乎有问题,所以我想知道实现这一项的最佳替代方案是什么。
HTTPie的完整文档:https://github.com/jkbr/httpie
发布于 2013-02-05 17:46:47
因此,如果您的模式是:
usage: http [METHOD] URL [ITEM...]然后运行$ http google.com bla,然后docopt将匹配google.com作为METHOD,因为,这是第一个位置参数!在这种情况下,docopt没有信息来推断METHOD应该是什么样子。但是,如果您有以下用法:
usage: http [get|post|put|delete] URL [ITEM...]但是,我可以看到这不是最优的: 1. httpie使用大写名称(它被解释为位置参数,而不是docopt的命令),2.如果有许多命令,使用可能会变成很长的一行。
如果你不关心httpie的兼容性,我会选择(A)小写命令,因为按照惯例命令是小写的。
usage: http METHOD URL [ITEM...]usage: http URL [ITEM...]
http METHOD URL [ITEM...]在这种情况下,第二个子模式永远不会匹配(docopt不知道任何关于urls和方法的内容,这使得第一个模式成为第二个模式的超集),然后我将参数分解为:
positional_arguments = [args['URL']] + args['ITEM']然后手动解析positional_arguments,这取决于第一个参数是看起来像url,还是像请求动词。
很抱歉docopt没有很好地处理这种情况,我会更多地考虑这个用例。
P.S.你是对的,REQUEST ITEM是错误的,非常非常规和令人困惑的。
https://stackoverflow.com/questions/14699714
复制相似问题