named argument in argparse
我想用他们的名字(比如Kwargs)把论点发送到脚本中。我试过这样的方法,但它没有做我想做的:(假设它是用script.py写的)
1 2 3 4 | import argparse parser = argparse.ArgumentParser() parser.add_argument("name") args = parser.parse_args() |
然后用逗号行书写:script.py name=david
还有一件事,假设我在argparse中没有命名参数,如果我不按声明的顺序发送它们,它还能正常工作吗?
所说的问题有点误解,或者我有一个很大的误解。
*关键字和**关键字用于将参数/内容传递到Python代码内的类/函数/方法。
argparse用于从外部/命令行向python程序传递参数/选项。所以你不会得到一对一的复制。然而,argparse是非常可配置的,根据您希望如何进行,您可以接近它。
如果只想传递一个名称,则:
1 2 3 4 5 6 | import argparse parser = argparse.ArgumentParser() parser.add_argument("name") args = parser.parse_args() print args |
会让你:
1 2 | $ ./pytest.py dave Namespace(name='dave') |
如果要设置名称以便也可以发送其他内容:
1 | parser.add_argument("-name") |
会让你:
1 2 | ./pytest.py -name dave Namespace(name='dave') |
但注意:
1 2 | ./pytest.py -name dave -name steve Namespace(name='steve') |
然而:
1 | parser.add_argument("--name") |
允许/要求:
1 2 3 4 5 | ./pytest.py --name dave Namespace(name='dave') ./pytest.py --name=dave Namespace(name='dave') |
如果你:
1 2 3 4 | parser.add_argument("--name", nargs="+") ./pytest.py --name dave steve murphy Namespace(name=['dave', 'steve', 'murphy']) |
但是:
1 2 | ./pytest.py --name=dave --name=steve --name=murphy Namespace(name= ['murphy']) |
(注意,最后一个列表中只有墨菲。)
所以你可以做的是:
1 2 3 4 5 6 | parser.add_argument("--name") parser.add_argument("--email") parser.add_argument("--hair-color") ./pytest.py --name fred --hair-color murphy --email example@example.com Namespace(email='[email protected]', hair_color='murphy', name='fred') |
在
"期权"由一个标志字符串表示,类似于
"位置"是按顺序标识的,没有任何标识名。这些类似于Python函数的
查看
我们定期从那些想绕过这些约定的人那里得到问题,例如希望使用不带前缀字符的标志,或者输入字典,如pairs、
我建议将
1 | ['script.py', 'name', '=', 'david'] |
您的shell已将该命令行拆分为单独的字符串。对这个列表进行您自己的解析可能比将
argparse可以很容易地处理输入,比如
1 2 3 | script.py --name david script.py --name=david script.py david |
秩序无关紧要。
把你的论点改成
1 | parser.add_argument('-name') |
另外,错误的是从命令行调用。应该是这样的:
1 | python script.py name david |