rub*_*co_ 4 python optparse python-2.7 argparse
使用 optparse,我目前有:
opts, args = parser.parse_args(sys.argv[1:])
Run Code Online (Sandbox Code Playgroud)
然后将其输入到接受 opts 的函数中:
func(opts,sys.argv)
Run Code Online (Sandbox Code Playgroud)
我现在尝试使用 argparse,但 argparse 的格式不同:
args = parser.parse_args(sys.argv[1:])
Run Code Online (Sandbox Code Playgroud)
这不允许我将选项输入到函数中。
我想知道是否有任何方法可以使用 argparse,同时保持选择输入到函数中。
我正在使用Python 2.7。
文档页面的末尾argparse
描述了基本差异。
opts, args = parser.parse_args(sys.argv[1:])
args = parser.parse_args(sys.argv[1:])
Run Code Online (Sandbox Code Playgroud)
在 中optparse
,所有标记的参数都被捕获在opts
变量中。其他一切都在args
列表中。
在 中argparse
,标记(也称为可选)和位置都收集在args
命名空间中
parse_known_args
给出的输出更接近optparse
:
args, extras = parser.parse_known_args(sys.argv[1:])
Run Code Online (Sandbox Code Playgroud)
extras
是它无法解析的字符串;大致对应于返回的第二个变量optparse
。
启动一个交互式 shell,定义几个解析器,并使用不同的参数。当然,打印输出('opts'、'args'、'extras')以查看它们产生的内容。
如果您还有其他问题,请在您的问题中包含示例解析器和输出。
In [3]: aparser=argparse.ArgumentParser()
In [4]: aparser.add_argument('-f');
In [5]: aparser.add_argument('bar');
In [6]: oparser=optparse.OptionParser()
In [7]: oparser.add_option('-f')
Run Code Online (Sandbox Code Playgroud)
optparse 解析:
In [22]: opts, rest = oparser.parse_args('-f one two'.split())
In [23]: opts
Out[23]: <Values at 0xaca3a02c: {'f': 'one'}>
In [24]: rest
Out[24]: ['two']
In [25]: opts.f
Out[25]: 'one'
Run Code Online (Sandbox Code Playgroud)
argparse 解析
In [26]: args = aparser.parse_args('-f one two'.split())
In [27]: args
Out[27]: Namespace(bar='two', f='one')
In [28]: args.f
Out[28]: 'one'
In [29]: args.bar
Out[29]: 'two'
Run Code Online (Sandbox Code Playgroud)
解析已知参数:
In [30]: args, extras = aparser.parse_known_args('-f one two three'.split())
In [31]: args
Out[31]: Namespace(bar='two', f='one')
In [32]: extras
Out[32]: ['three']
Run Code Online (Sandbox Code Playgroud)