为了得到你正在寻找的东西,诀窍是使用parse_known_args()
而不是parse_args()
:
#!/bin/env python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-a', action="store_true")
parser.add_argument('-b', action="store_true")
opts = parser.parse_known_args()
# Print info about flags
if opts[0].a: print('You set the option "-a"')
if opts[0].b: print('You set the option "-b"')
# Collect remainder (opts[1] is a list (possibly empty) of all remaining args)
if opts[1]: print('You passed the strings %s' % opts[1])
编辑:
上述代码显示以下帮助信息:
./clargs.py -h
用法:clargs_old.py [-h] [-a] [-b]
可选参数:
-h, --help 显示此帮助信息并退出
-一个
-b
如果您想告知用户可选的任意参数,我能想到的唯一解决方案是将 ArgumentParser 子类化并自己编写。
例如:
#!/bin/env python
import os
import argparse
class MyParser(argparse.ArgumentParser):
def format_help(self):
help = super(MyParser, self).format_help()
helplines = help.splitlines()
helplines[0] += ' [FOO]'
helplines.append(' FOO some description of FOO')
helplines.append('') # Just a trick to force a linesep at the end
return os.linesep.join(helplines)
parser = MyParser()
parser.add_argument('-a', action="store_true")
parser.add_argument('-b', action="store_true")
opts = parser.parse_known_args()
# Print info about flags
if opts[0].a: print('You set the option "-a"')
if opts[0].b: print('You set the option "-b"')
# Collect remainder
if opts[1]: print('You passed the strings %s' % opts[1])
其中显示以下帮助信息:
./clargs.py -h
用法:clargs.py [-h] [-a] [-b] [FOO]
可选参数:
-h, --help 显示此帮助信息并退出
-一个
-b
FOO 对 FOO 的一些描述
请注意[FOO]
在“用法”行和FOO
“可选参数”下的帮助中添加的。