无法弄清楚如何将参数传递给argparse

时间:2017-05-24 07:16:37

标签: python command-line argparse spyder

我正在阅读关于argparse模块的文档,但我无法弄清楚如何获得与文档中所述相同的结果。您可以在命令行中指定参数,也可以在parse_args()中指定它们,这有助于测试。这是一个例子:

parser = argparse.ArgumentParser()
parser.add_argument('--foo')
parser.parse_args('--foo 1'.split())

这直接来自这里的文档:

https://docs.python.org/3.6/library/argparse.html#action

应该输出:

Namespace(foo='1')

但这就是我得到的:

Namespace(foo=None)

我也尝试了以下内容:

parser = argparse.ArgumentParser()
parser.add_argument('--foo', action='store_true')
parser.add_argument('--bar', action='store_false')
parser.add_argument('--baz', action='store_false')
parser.parse_args(['--foo', '--bar'])

那个输出这个:

Namespace(bar=True, baz=True, foo=False)

这应该是它应该做的。谁能告诉我这里发生了什么?以下是我用于为上面显示的两段代码生成输出的完整代码:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--foo')
parser.parse_args('--foo 1'.split())
args = parser.parse_args()
print(args)
#supposed to be Namespace(foo='1')

parser = argparse.ArgumentParser()
parser.add_argument('--foo', action='store_true')
parser.add_argument('--bar', action='store_false')
parser.add_argument('--baz', action='store_false')
parser.parse_args(['--foo', '--bar'])
args = parser.parse_args()
print(args)
#supposed to be Namespace(foo=True, bar=False, baz=True)

我不知道它是否有所作为,但我在Spyder 3.1.4中这样做并且我正在运行Python 3.6.0

  

更新

由于文档中有些含糊不清,我不知道他们如何从设置命令行参数到显示输出。在@hpaulj的帮助下,我意识到我正在做的就是显示相对于arg.sysv而不是指定的自定义命令行的输出 - 哎呀!这是更正后的代码:

parser = argparse.ArgumentParser()
parser.add_argument('--foo')
#added this assignment to args
args = parser.parse_args('--foo 1'.split())
#following line was wrong - removing
#args = parser.parse_args()
print(args)
#supposed to be Namespace(foo='1')

parser = argparse.ArgumentParser()
parser.add_argument('--foo', action='store_true')
parser.add_argument('--bar', action='store_false')
parser.add_argument('--baz', action='store_false')
#added this assignment to args
args = parser.parse_args(['--foo', '--bar'])
#following line was wrong - removing
#args = parser.parse_args()
print(args)
#supposed to be Namespace(foo=True, bar=False, baz=True)

1 个答案:

答案 0 :(得分:0)

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
args = parser.parse_args('--foo 1'.split())
print(args)

这会给你答案。你试图再次解析这就是为什么它给了无