2017-04-07 25 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']