docopt的参数字典标志显示其参数的值而不是True / False

时间:2015-08-30 18:00:56

标签: python command-line-interface docopt

我的python程序中有一个docopt docstring,它看起来像这样:

"""
program.py

Usage:
  program.py (-h | --help)
  program.py --version
  program.py word2vec DIRECTORY [-u MODEL] [-v]
  program.py word2vec DIRECTORY [-o OUTPUTMODEL] [-v]
  program.py tsneplot <model> <word> [-s <dest> <plotname>]

Options:
  -h --help               Show this screen.
  --version               Show version.
  -o OUTPUTMODEL          Specify the name of the output model
  -s <dest> <plotname>    Specify the destination folder and the name of the plot to be saved (for the tsne command)
  -u MODEL                Specify the name of the model to update
  -v                      Verbose output

"""

当我尝试命令时

python program.py word2vec rootfolder -o outputmodel

输出参数字典的格式为

{'--help': False,
 '--version': False,
 '-o': 'outputmodel',
 '-s': None,
 '-u': None,
 '-v': False,
 '<model>': None,
 '<plotname>': None,
 '<word>': None,
 'DIRECTORY': 'rootfolder',
 'tsneplot': False,
 'word2vec': True}

这里的问题是,它不是给True标志赋予-o值,而是为-o标志提供一个应该在OUTPUTMODEL密钥中的值。换句话说,-o标志获取参数的值,而参数OUTPUTMODEL的密钥本身不存在。当我尝试一个看起来像这样的命令时,会发生同样的情况:

 python program.py word2vec rootfolder -u updatedmodel

输出字典:

   {'--help': False,
 '--version': False,
 '-o': None,
 '-s': None,
 '-u': 'updatedmodel',
 '-v': False,
 '<model>': None,
 '<plotname>': None,
 '<word>': None,
 'DIRECTORY': 'rootfolder',
 'tsneplot': False,
 'word2vec': True}

'-u'标志被赋予其参数的值,并且参数MODEL(如用法中所示)不存在。

在命令

中使用-s标志会发生类似的事情
program.py tsneplot <model> <word> [-s <dest> <plotname>]

-s标志获取<dest>参数的值,并且字典中不存在<dest>参数的键。

在我做了一些小改动之前,它刚刚工作正常。我试图查看docstring并阅读文档,但无法弄清楚我可能出错的地方,因为我似乎已经正确地指定了选项说明。有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您忘记了<...>周围的DIRECTORY标志。试试这个:

"""
program.py

Usage:
  program.py (-h | --help)
  program.py --version
  program.py word2vec <DIRECTORY> [-u MODEL] [-v]
  program.py word2vec <DIRECTORY> [-o OUTPUTMODEL] [-v]
  program.py tsneplot <model> <word> [-s <dest> <plotname>]

Options:
  -h --help               Show this screen.
  --version               Show version.
  -o OUTPUTMODEL          Specify the name of the output model
  -s <dest> <plotname>    Specify the destination folder and the name of the plot to be saved (for the $
  -u MODEL                Specify the name of the model to update
  -v                      Verbose output
"""