3

docoptPythonでコマンドライン入力を解析するために使用しています。私は私のdocstringを持っています:

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

これを修正するにはどうすればよいですか?

4

1 に答える 1

2

この表記法:

>>> python docoptTest.py -n asdf asdf

各オプションは 1 つの引数しかとらないため、おそらく 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']}
于 2016-11-02T09:43:07.050 に答える