首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在docopt中实现HTTPie

在docopt中实现HTTPie
EN

Stack Overflow用户
提问于 2013-02-05 11:29:58
回答 1查看 287关注 0票数 1

我正在尝试使用docopt实现HTTPie的CLI,但由于某些原因,我无法将方法optional作为第一个参数。我已经删除了大多数选项来隔离这个问题。

此外,HTTPie获取请求项的作者使用docopt文档的方式似乎有问题,所以我想知道实现这一项的最佳替代方案是什么。

HTTPie的完整文档:https://github.com/jkbr/httpie

我的文档选择示例:https://gist.github.com/dasickis/4711926

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-05 17:46:47

因此,如果您的模式是:

代码语言:javascript
复制
usage: http [METHOD] URL [ITEM...]

然后运行$ http google.com bla,然后docopt将匹配google.com作为METHOD,因为,这是第一个位置参数!在这种情况下,docopt没有信息来推断METHOD应该是什么样子。但是,如果您有以下用法:

代码语言:javascript
复制
usage: http [get|post|put|delete] URL [ITEM...]

但是,我可以看到这不是最优的: 1. httpie使用大写名称(它被解释为位置参数,而不是docopt的命令),2.如果有许多命令,使用可能会变成很长的一行。

如果你不关心httpie的兼容性,我会选择(A)小写命令,因为按照惯例命令是小写的。

代码语言:javascript
复制
usage: http METHOD URL [ITEM...]

代码语言:javascript
复制
usage: http URL [ITEM...] 
       http METHOD URL [ITEM...]

在这种情况下,第二个子模式永远不会匹配(docopt不知道任何关于urls和方法的内容,这使得第一个模式成为第二个模式的超集),然后我将参数分解为:

代码语言:javascript
复制
positional_arguments = [args['URL']] + args['ITEM']

然后手动解析positional_arguments,这取决于第一个参数是看起来像url,还是像请求动词。

很抱歉docopt没有很好地处理这种情况,我会更多地考虑这个用例。

P.S.你是对的,REQUEST ITEM是错误的,非常非常规和令人困惑的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14699714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档