我正在阅读关于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)
答案 0 :(得分:0)
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
args = parser.parse_args('--foo 1'.split())
print(args)