如何将argparse的值存储在变量中?

17

我正在尝试为我的脚本添加命令行选项,使用以下代码:

import argparse

parser = argparse.ArgumentParser('My program')
parser.add_argument('-x', '--one')
parser.add_argument('-y', '--two')
parser.add_argument('-z', '--three')

args = vars(parser.parse_args())

foo = args['one']
bar = args['two']
cheese = args['three']

这样做是正确的吗?

另外,我该如何从IDLE shell中运行它?我使用命令 'python myprogram.py -x foo -y bar -z cheese' 但它给了我一个语法错误。

3个回答

32

那样做是可以的,但你可以像这样简化它:

args = parser.parse_args()

foo = args.one
bar = args.two
cheese = args.three

7
使用args.__dict__
args.__dict__["one"]
args.__dict__["two"]
args.__dict__["three"]

5
我同意你的解决方案是正确的,也很有趣。同时,一些人在SO上会变得非常焦躁,并且如果Python领域的回答不符合他们认为的可接受的Pythonic形式,就会给出负面评价。尽管什么是“可接受的”会随着时间而改变。 - David Pointer
@DavidPointer就是它本来的样子吧。谢谢你的同情投票 :P - Greg
我不知道。毕竟,OP已经使用了vars(),它已经返回了**dict**。 - Giacomo Pigani
3
它“能用”,但应该避免使用。下划线的存在是一个强烈的提示,这些方法不是为了直接调用而设计的。因此,是的,它能工作,但不,这不是一个好答案。我理解有些人会对其进行反对票。 - gvo

2
获取参数值的标准方法(在文档中建议使用的方式)是使用 vars ,并按名称访问参数值。
argv = vars(args)

one = argv['one']
two = args['two']
three = argv['three']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接