如何使用argparse参数打印字符串而不执行任何其他操作

时间:2014-08-27 21:49:03

标签: python

我希望使用Python --foobar创建一个参数argparse,这样无论何时出现此参数,程序都会打印一个特定的字符串并退出。我不想消耗任何其他参数,我不想检查其他参数,没有。

我必须以某种方式调用add_argument,然后或许,从parse_args()获取一些信息并根据它打印我的字符串。

但即使我之前成功使用过argparse,我也很惊讶地发现我遇到了这个问题。

例如,nargs值似乎没有达到我想要的效果,action值似乎都不合适。他们搞砸了其他论点,一旦看到这个论点我就不理睬。

怎么做?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

使用action='store_true'see the docs)。

<强> 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