所以我写了一个非常小的程序来处理httpget和post请求。请求如下:
requestApp.py help
requestApp.py help get
requestApp.py help post
requestApp.py get [-v] [-h key:value] URL
requestApp.py post [-v] [-h key:value] [-d inline-data] [-f file] URL
如您所见,-v、-h、-d、-f、URL参数是可选的。get和post参数是非可选的。我将向您展示与此情况相关的程序片段:
^{pr2}$command
参数将是help、get或post,url
参数是不言自明的。我的问题与上述第二和第三条命令有关,即:
requestApp.py help get
requestApp.py help post
如何确保在键入help get
时,get
不会在URL中注册(与help post
相同)。另外,当我包含一个URL时,我希望它存储在URL参数中。我是否必须手动计算通过if语句传递的参数?还是有更好的办法?在
或许,最接近的解决方案是:
由此产生的帮助是:
^{pr2}$合身并不完美。例如,您可以只提供
help
,但可以只提供-h
。第二个位置值可以是任何字符串、“get”、有效的url或其他内容。你自己的代码必须有效。key:value
位需要您自己的解析。在在
argparse
解析方法中,optionals
可以以任何顺序出现。这两个位置必须按给定的顺序出现(彼此相对)。在在较新的python中,我可以将最后一个位置改为“optional”,并使用新的
intermixed
解析器。这样我就可以“帮助”(或“得到”):如果两个位置值用标志分隔,则需要
intermixed
。由于某些复杂的原因,常规解析可能会使用“?”参数过早地留给您一个额外的无法识别的字符串。在另一种方法是定义所有标记的参数,并使用
parse_known_args
。非标志值将在extras
列表中,您可以根据需要对其进行分析。像optparse
这样的旧解析器本质上就是这样做的。argparse
还添加了处理位置参数的有限能力,但严格按位置,而不是按值。在使用
argparse
执行此操作非常复杂。下面是如何使用docopt
,docopt
解析使用模式并返回字典:例如,
^{pr2}$requestApp.py post -k hello:world -f myfile.txt google.com
docopt将返回:然后您可以:
默认情况下,
-h
是一个保留选项(用于帮助),它使docopt返回使用模式并退出。docopt
将使用模式返回到stdout,如果您尝试非法命令,如requestApp help unicorn
,则退出相关问题 更多 >
编程相关推荐