我想把参数按它们的名字发送到脚本(类似于kwargs)。
我试过这样的方法,但它并没有按我的要求做:(假设它是用script.py写的)
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("name")
args = parser.parse_args()
然后用逗号行书写:script.py name=david
另一件事,假设我在argparse中很少有命名参数,如果我不按声明的顺序发送它们,它还能正常工作吗?
Tags:
上面提到的这个问题有点误会,或者我有一个很大的误会。
*keyword和**keyword用于将参数/资料传递给python代码中的类/函数/方法。
argparse用于从外部/命令行向python程序传递参数/选项。所以你不会得到1对1的复制。然而,argparse是非常可配置的,并且取决于您想要如何完成它,您可以接近。
如果只想传递一个名称,则:
会让你:
如果要设置名称以便也可以发送其他内容:
会让你:
但请注意:
但是:
将允许/要求:
如果你:
但是:
(请注意,最后一个列表中只有墨菲。)
所以你可以做的是:
顺序无关紧要。
把你的论点改为
另外,问题是您从命令行调用。应该是这样的:
在
argparse
和早期的相同样式的命令行处理程序中,“optionals”或标记的参数与位置参数之间存在区别。“optionals”由标志字符串表示,类似于
-f
或--foo
。它们类似于Python函数的关键字参数,但不完全相同。顺序无关紧要。使用in-limits,标志可以连接到值,例如-f1
,--foo=astring
。“位置”是按顺序标识的,没有任何标识名称。它们类似于Python函数的
args
。在函数中,所有位置参数都必须出现在关键字参数之前。使用argparse
“optionals”可以与“positional”混合使用,但有一些限制。通常在选项之后提供所有位置,如argparse
用法消息中所示。看看
argparse
文档中的示例。我们周期性地从那些想要绕过这些约定的人那里得到问题,例如希望使用不带前缀字符的flag,或者输入类似字典的对
foo=test
或foo:test
。有些是可能的,但需要更多的工作。而且通常在清晰度和实用性方面没有什么好处。我建议将
script.py name = david
传递给只显示sys.argv
列表的脚本。这些是argparse
必须使用的值。我希望你会看到:您的shell已将命令行拆分为单独的字符串。对这个列表进行自己的解析可能比将
argparse
扭曲成一个可以解析的表单要容易得多。Argparse可以很容易地处理如下输入
相关问题 更多 >
编程相关推荐