2017-04-07 58 views
0

使用optparse,我目前有:转换optparse到argparse

opts, args = parser.parse_args(sys.argv[1:]) 

,然后送入接受OPTS功能:

func(opts,sys.argv) 

我想现在argparse使用,但格式化argparse是不同的:

args = parser.parse_args(sys.argv[1:]) 

它不允许我将选择器送入函数。

我想知道是否有任何方法使用argparse,同时保持opts进入函数。

我正在使用Python 2.7。

回答

0

您可以以与optparse非常类似的方式使用​​。从the documentation你可以看到你只需要用---加前缀参数,它就成为一个可选参数。

下面是从文档的例子:

parser = argparse.ArgumentParser() 
parser.add_argument('-f', '--foo') 
parser.add_argument('bar') 
args = parser.parse_args 

此外,你可以改变prefix chars如果你的程序需要有由不同charaters前缀选项:

parser = argparse.ArgumentParser(prefix_chars='+') 
parser.add_argument('+f', '++foo') 
parser.add_argument('bar') 
args = parser.parse_args 
0

的结束​​文档页面描述了基本的区别。

opts, args = parser.parse_args(sys.argv[1:]) 

args = parser.parse_args(sys.argv[1:]) 

optparse,所有标记参数被在opts变量捕获。其他一切都在args列表中。

在​​,两个标记(也称为自选)和positionals被收集在args命名空间

parse_known_args给出了一个输出更接近optparse

args, extras = parser.parse_known_args(sys.argv[1:]) 

extras都是字符串,它可以” t解析;大致对应于由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') 

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' 

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' 

parse_known_args:

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']