2016-11-01 28 views
3

我使用docopt來解析python中的命令行輸入。我有我的文檔字符串:在docopt中執行重複元素時遇到困難

""" 
Usage: 
    docoptTest.py [options] 

Options: 
    -h --help    show this help message and exit 
    -n --name <name>   The name of the specified person 
""" 

於是我進口docopt並解析參數,並打印出來:

from docopt import docopt 
args = docopt(__doc__) 
print(args) 

>>> python docoptTest.py -n asdf 
{'--help': False, 
'--name': 'asdf'} 

我試圖把省略號以允許輸入多個名稱:

-n --name <name>...  The name of the specified person 

但是我收到了一個使用錯誤。然後我把橢圓形的初始用法消息:

""" 
Usage: 
    docoptTest.py [-n | --name <name>...] [options] 

Options: 
    -h --help    show this help message and exit 
    -n --name    The name of the specified person 
""" 

但輸出認爲--name是一個標誌。

>>> python docoptTest.py -n asdf asdf 
{'--help': False, 
'--name': True, 
'<name>': ['asdf', 'asdf']} 

我該如何解決這個問題?

回答

1

這個符號:

>>> python docoptTest.py -n asdf asdf 

可能不會與docopt工作,因爲每個選項只有一個參數。如果你想這樣做,那麼你可以使用某種分隔符,例如逗號,然後自己分割。如果添加參數,問題就會出現,那麼解析器將無法將最後的asdf區分爲選項或參數的一部分。有些人還在選項和參數之間加入了=

也許你可以代替試試這個:

Usage: 
    docoptTest.py [-n|--name <name>]... [options] 

Options: 
    -h --help    show this help message and exit 
    -n --name <name>   The name of the specified person 

這是做一些非常相似的一個相當普遍的方式。 docopt字典將如下所示:

$python docoptTest.py -n asdf -n ads 
{'--help': False, 
'--name': ['asdf', 'ads']} 
$python docoptTest.py --name asdf --name ads 
{'--help': False, 
'--name': ['asdf', 'ads']} 
+0

謝謝。這個問題是基本的問題嗎(不管它是一個參數還是一個值)都是模糊的,還是我可以用選項描述來做其他事情? – PolarBearITS

+0

我覺得你可以做的並不多。之後你可以自行拆分。你可以使''asdf''作爲一個參數,通過使用'''作爲一個參數,並且自己分割它。我認爲docopt遵循開放組對utilites的規範:http://pubs.opengroup.org/onlinepubs /007908799/xbd/utilconv.html。這並沒有描述如何處理雙短劃線選項,但這些可能是根據最佳實踐來處理的。 –