无法弄清楚如何将参数传递给 argparse
Can't figure out how to pass arguments to argparse
我正在浏览 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
UPDATE
由于文档中的一些歧义,我不知道他们是如何从设置命令行参数到显示输出的。在@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)
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
args = parser.parse_args('--foo 1'.split())
print(args)
这会给你答案。您正在尝试再次解析,这就是它给出 None
的原因
我正在浏览 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
UPDATE
由于文档中的一些歧义,我不知道他们是如何从设置命令行参数到显示输出的。在@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)
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
args = parser.parse_args('--foo 1'.split())
print(args)