我在使用pythonv2.7的argparse
模块时遇到了一些问题。
基本上,我有一个脚本,有5个强制参数:
语法示例如下:
script.py -w/--url [URL] -m/--method [METHOD] -l/--login [LOGIN] -p/--password [PASSWORD] -o/--output [OUTPUT]
我想做的是:
-t/--test
-w/--url
参数一起使用的url,它将完全绕过-m/--method
、-l/--login
和{-t/--test
(但仅限于-w/--url
)。在这种行为有可能吗?我试图使用argparse
子命令,但似乎(至少在我的小知识范围内)有点过火了。在
这是我的原始代码:
# Description : parses script arguments
# Argument(s) : all
# Return value : all arguments values
def testArgs():
parser = argparse.ArgumentParser(description='Foo', formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument('-w','--url', help='URL', required=True)
parser.add_argument('-t','--test', help='Test command', action='store_true')
parser.add_argument('-m','--method', help='METHOD', required=True)
parser.add_argument('-u','--login_name', help='LOGIN', required=True)
parser.add_argument('-p','--login_password', help='PASSWORD', required=True)
parser.add_argument('-o','--output_format', help='OUTPUT', required=True, choices=['json', 'yaml', 'python'], default='json')
args = parser.parse_args()
return args
编辑:经过大量测试,我已经完成了以下工作:
^{pr2}$表现出以下行为:
$ python testArgparse.py -h
usage: testArgeparse.py [-h] {test,cmd} ...
DESCRIPTION
positional arguments:
{test,cmd}
test Lists all available methods
cmd Executes command
optional arguments:
-h, --help show this help message and exit
但要获得其他论点的帮助,我需要执行以下操作:
$ python testArgparse.py test -h
usage: testArgparse.py test [-h] -w W -t
optional arguments:
-h, --help show this help message and exit
-w W URL
-t Test
$ python testArgparse.py cmd -h
usage: testArgparse.py cmd [-h] -w W -m M -l L -p P -o O
optional arguments:
-h, --help show this help message and exit
-w W URL
-m M Method
-l L Login
-p P Password
-o O Output
我希望至少能够显示所有参数的帮助,而不必对test
和cmd
参数使用--help
。在
理想情况下,我希望这种行为:
$ python testArgparse.py [-w URL -t] | [-w URL -m METHOD -u LOGIN -p PASS -o OUTPUT]
带有
store_true
的required=True
没有意义。默认值是False
,但如果需要,返回值将始终是True
。在因为只有
-w
是无条件要求的,所以我将在其他所有内容上删除required
参数。然后测试parse_args
之后的所需值。我仍然可以发出argparse
错误的用法。换句话说,做我自己的测试,而不是在argparse中尝试一些花哨的东西。在相关问题 更多 >
编程相关推荐