我正在尝试学习pythons docopt模块,并具有以下简单脚本:

""" Usage:
rsnapshot-once [-c CFGFILE] (sync|hourly|daily|monthly)

    -c CFGFILE  specify the configfile that rsnapshot should use
"""

import logging
import sys

from docopt import docopt

args = docopt(__doc__, version='0.0.1-alpha')

logging.basicConfig(stream=sys.stdout, level=logging.DEBUG, formatter=logging.BASIC_FORMAT)
logging.debug("Parsed arguments:\n" + str(args));

if not args.get("-c"):
    args['CFGFILE'] = "/etc/rsnapshot.conf"


使用-c选项从命令行调用时:

% ./rsnapshot-once.py -c someconfigfile sync
DEBUG:root:Parsed arguments:
{'-c': True,
 'CFGFILE': 'someconfigfile',
 'daily': False,
 'hourly': False,
 'monthly': False,
 'sync': True}


仅通过命令时:

% ./rsnapshot-once.py daily
Usage:
        rsnapshot-once [-c CFGFILE] (sync|hourly|daily|monthly)


看来我误会了。谁能给我一个提示,我在做什么错?

谢谢

最佳答案

您给出的示例在这里起作用。因此,可能与您使用的docopt版本有关。关于表示法,您几乎处于正确的轨道上,仅缺少一些小细节。

在选项之前,应该有一行显示“选项:”。 Docopt对此进行查找,然后对其进行解释。在选项部分中,也可以设置选项的默认值。

这是一个例子:

"""Usage:
  rsnapshot-once [-c CFGFILE] (sync|hourly|daily|monthly)

Options:
  -c CFGFILE  specify the configfile that rsnapshot should use
              [default: /etc/rsnapshot.conf]
"""


然后,用户还将看到默认值是什么。

关于python - Docopt仅在给出可选零件时继续进行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46084887/

10-11 00:13