2008-12-24 87 views
35

我在我的程序中使用了python optparse模塊,並且在查找包含值列表的選項時很難找到一個簡單的方法。Python Optparse list

例如:

--groups one,two,three. 

我希望能在一個列表格式來訪問這些值options.groups[]。是否有一個optparse選項將逗號分隔值轉換爲列表?或者我必須手動執行此操作?

回答

36

看看option callbacks。回調函數可以通過解析值到列表的基本optarg.split(',')

78

美國洛特的答案已經被接受,但這裏的檔案代碼示例:

def foo_callback(option, opt, value, parser): 
    setattr(parser.values, option.dest, value.split(',')) 

parser = OptionParser() 
parser.add_option('-f', '--foo', 
        type='string', 
        action='callback', 
        callback=foo_callback) 
9

同樣,只爲求檔案的完整性,擴展上面的例子:

  • ,您仍然可以使用「目標」,以供以後訪問指定選項名稱
  • 默認值不能在這樣的情況下才能使用(參見解釋在0123然後)
  • 如果您想驗證輸入,OptionValueError應該從foo_callback拋出

代碼(有微小的變化)將是:

def get_comma_separated_args(option, opt, value, parser): 
    setattr(parser.values, option.dest, value.split(',')) 

parser = OptionParser() 
parser.add_option('-f', '--foo', 
        type='string', 
        action='callback', 
        callback=get_comma_separated_args, 
        dest = foo_args_list) 
4

隨着optparse,得到列表值,您可以使用行動 '追加':

from optparse import OptionParser 
parser = OptionParser() 
parser.add_option("--group", 
        action="append", 
        dest="my_groups") 
(options, args) = parser.parse_args() 
print options.my_groups 

然後調用你的程序是這樣的:

$蟒蛇demo.py --group一個--group 2 --group 3

[ '一', '二', '三化' ]