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

3 投票
3 回答
1031 浏览
提问于 2025-04-18 18:47

我想在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

撰写回答