需要简单的argparse示例:1个参数,3个结果

2024-04-24 19:22:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我敢肯定,argparse python moduledocumentation虽然很好,但对于我这个小小的初学者来说,现在掌握的太多了。我不需要在命令行上做数学运算,也不需要在屏幕上处理格式化行或更改选项字符。我只想做“如果arg是A,那么做这个,如果B是B,那么如果上面没有显示帮助并退出”


Tags: 命令行屏幕documentation选项argargparse数学字符
3条回答

下面是我使用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示例,我很惊讶在这里没有看到它。当然,简单地说,这也是一个几乎没有电的开销,但它可能会让你开始。

import argparse

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

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

但现在需要这个位置参数。如果在调用此程序时忽略它,则会得到有关缺少参数的错误。这就引出了原问题的第二部分。Matt Wilkie似乎想要一个没有命名标签(选项标签)的可选参数。我的建议是修改上面的代码如下:

...
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文档相当不错,但遗漏了一些可能不明显的有用细节。(@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"

还要注意,在添加参数时可以使用“必需”选项:

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

这样,如果您在命令行argparse中省略此参数,将告诉您它已丢失并停止执行脚本。

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

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

如您所见,vars返回一个dict,其中您的参数名是键,它们的值是,er,values。

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

相关问题 更多 >