如何使用argparse使参数打印字符串并不执行其他操作
我想在Python中使用一个叫做--foobar
的参数,这样每当这个参数出现时,程序就会打印一个特定的字符串并退出。我不想处理其他任何参数,也不想检查其他参数,什么都不想。
我必须以某种方式调用add_argument
,然后可能通过parse_args()
获取一些信息,基于这些信息打印我的字符串。
但是即使我之前成功使用过argparse
,这次我还是发现自己遇到了麻烦。
比如说,nargs
的值似乎没有一个能满足我的需求,而action
的值也没有一个合适的。它们会和其他参数搞混,而我希望一旦看到这个参数,就忽略其他的。
那该怎么做呢?
3 个回答
0
使用 action='store_true'
(查看文档)。
arg_test.py:
import argparse
import sys
p = argparse.ArgumentParser()
p.add_argument('--foobar', action='store_true')
args = p.parse_args()
if args.foobar:
print "foobar"
sys.exit()
用法:
python arg_test.py --foobar
结果:
foobar
0
我就把这个放在这里,如果能帮到你那就太好了!
import argparse
parser = argparse.ArgumentParser(description='')
parser.add_argument('-foobar', '--foobar', help='Description for foobar argument',
required=False)
args = vars(parser.parse_args())
if args['foobar'] == 'yes':
foobar()
用法:
python myscrip.py -foobar yes
1
使用自定义的 action=
参数:
import argparse
class FoobarAction(argparse.Action):
def __init__(self, option_strings, dest, **kw):
self.message = kw.pop('message', 'Goodbye!')
argparse.Action.__init__(self, option_strings, dest, **kw)
self.nargs = 0
def __call__(self, parser, *args, **kw):
print self.message
parser.exit()
p = argparse.ArgumentParser()
p.add_argument('--ip', nargs=1, help='IP Address')
p.add_argument('--foobar',
action=FoobarAction,
help='Abort!')
p.add_argument('--version',
action=FoobarAction,
help='print the version number and exit!',
message='1.2.3')
args = p.parse_args()
print args
参考链接: https://docs.python.org/2.7/library/argparse.html#action-classes
编辑:
看起来已经有一个 action=
参数,它的功能和 FoobarAction
一样。你可以使用 action='version'
来实现:
import argparse
p = argparse.ArgumentParser()
p.add_argument('--foobar',
action='version',
version='Goodbye!',
help='Abort!')
args = p.parse_args()
print args