2013-08-27 73 views
4

我想使用docopt解析一個命令行,多次可以接收相同的選項。有人可以解釋我該怎麼做嗎?選項多重性與docopt

的試驗例如:

#!/usr/bin/env python 

""" 
Test program. 

Usage: 
    test.py -v 

Options: 
    -v Flag that should be counted 
""" 

import docopt 
print docopt.docopt(__doc__) 

如果我運行此與test.py -v,我得到:

{'-v': True} 

在哪裏,如果我與test.py -vv運行此,它顯示用法消息(指示命令線無效)。

我想調整的選項,文檔,以便docopt返回我:

{'-v': 1} 

當只有1 -v獲得通過,並:

{'-v': 3} 

如果說,通過-vvv用戶。這幾乎是相同的功能the count action in argparse

回答

7

挖docopt(關閉)問題清單後,I have found that the right way to represent this是:

#!/usr/bin/env python 

""" 
Test program. 

Usage: 
    test.py (-v ...) 

Options: 
    -v Flag that should be counted 
""" 

import docopt 
print docopt.docopt(__doc__) 

也就是說,必須使用符號「...」以表示一個選項可能會出現多次。在這種情況下,該選項將被正確計數。如果上面的程序被稱爲與test.py -vvv,它將正確打印:

{'-v': 3}

符號「...」也可以帶參數和帶參數幾乎相同的方式選項一起使用,只需點擊上面的鏈接作爲一個例子。

+0

這可以擴展爲傳遞一個列表作爲參數 –

+0

@KaushikGhose可以傳遞一個列表,如下所示:'--input-files a.csv b.csv --output-files c.csv d.csv' ?你究竟是什麼意思? –

+0

@TheUnfunCat它更像是:'--input-files a.csv --input-files b.csv --output-files c.csv --output-files d.csv' –

2

(這只是一個上述評論,但會得到尷尬的註釋。)

這可以擴展到通過列表作爲參數:

""" 
Usage: 
program (--opt=OPT ...) 

Options: 
    --opt=OPT An option that can be specified multiple times to form a list 
""" 

import docopt 

print docopt.docopt(__doc__) 

而且我們運行這個爲

python test.py --opt=first_option 
{'--opt': ['first_option']} 

python test.py --opt=first_option --opt="second in line" 
{'--opt': ['first_option', 'second in line']} 

依此類推。