简单的想法:1个参数,3个结果

argparse python模块的文档虽然非常出色,但对于我的小小初学者大脑来说,现在太多了。 我不需要在命令行上进行数学运算,也不需要在屏幕上插入格式化线或更改选项字符。 我想要做的就是“如果arg是A,那么做到这一点,如果B做到了,如果以上都没有显示帮助并退出”。


我对原始问题的理解有两方面。 首先,就最简单可能的考虑范例而言,我很惊讶我没有在这里看到它。 当然,简单来说,这也是所有开销都很小的权力,但它可能会让你开始。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("a")
args = parser.parse_args()

if args.a == 'magic.name':
    print 'You nailed it!'

但是这个立场论点现在是必需的。 如果您在调用此程序时将其忽略,则会出现有关缺少参数的错误。 这导致我到原始问题的第二部分。 马特威尔基似乎想要一个没有命名标签的单个可选参数( - 选项标签)。 我的建议是修改上面的代码,如下所示:

...
parser.add_argument("a", nargs='?', default="check_string_for_empty")
...
if args.a == 'check_string_for_empty':
    print 'I can tell that no argument was given and I can deal with that here.'
elif args.a == 'magic.name':
    print 'You nailed it!'
else:
    print args.a

这可能是一个更优雅的解决方案,但这种方法很有效,而且极简主义。


这是我用argparse (带有多个参数)的方式:

parser = argparse.ArgumentParser(description='Description of your program')
parser.add_argument('-f','--foo', help='Description for foo argument', required=True)
parser.add_argument('-b','--bar', help='Description for bar argument', required=True)
args = vars(parser.parse_args())

args将是一个包含参数的字典:

if args['foo'] == 'Hello':
    # code here

if args['bar'] == 'World':
    # code here

在你的情况下只需添加一个参数。


argparse文档相当不错,但留下了一些可能不明显的有用细节。 (@Diego Navarro已经提到了其中的一些,但我会尽量扩大他的回答。)基本用法如下:

parser = argparse.ArgumentParser()
parser.add_argument('-f', '--my-foo', default='foobar')
parser.add_argument('-b', '--bar-value', default=3.14)
args = parser.parse_args()

您从parse_args()返回的对象是一个'Namespace'对象:一个对象,其成员变量以您的命令行参数命名。 Namespace对象是你如何访问你的参数和与它们相关的值:

args = parser.parse_args()
print args.my_foo
print args.bar_value

(请注意,在命名变量时, argparse在您的参数名称中用下划线替换' - '。)

在许多情况下,您可能希望仅将参数用作不带任何价值的标志。 你可以像这样在argparse中添加这些:

parser.add_argument('--foo', action='store_true')
parser.add_argument('--no-foo', action='store_false')

上面将分别创建名为'foo'和值为True的变量,'no_foo'的值为False:

if (args.foo):
    print "foo is true"

if (args.no_foo is False):
    print "nofoo is false"

另请注意,添加参数时可以使用“required”选项:

parser.add_argument('-o', '--output', required=True)

这样,如果你在命令行省略了这个参数, argparse会告诉你它缺失并停止执行你的脚本。

最后,请注意,使用vars函数可以创建参数的字典结构,如果这样可以让您的生活更轻松。

args = parser.parse_args()
argsdict = vars(args)
print argsdict['my_foo']
print argsdict['bar_value']

正如你所看到的, vars返回一个字典,其中你的参数名称作为关键字,它们的值作为呃值。

还有很多其他的选择和你可以做的事情,但是这应该包括最基本的,常见的使用场景。

链接地址: http://www.djcxy.com/p/28549.html

上一篇: Simple argparse example wanted: 1 argument, 3 results

下一篇: argparse module How to add option without any argument?