Docopt 只有在给出可选部分时才会继续
Docopt only proceedes when an optional part is given
我正在尝试学习 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 版本有关。关于符号你几乎在正确的轨道上,只是缺少一些小细节。
在选项之前,应该有一行 "Options:"。 Docopt 寻找这个,并解释后面的行。在选项部分也可以设置选项的默认值。
这是一个例子:
"""Usage:
rsnapshot-once [-c CFGFILE] (sync|hourly|daily|monthly)
Options:
-c CFGFILE specify the configfile that rsnapshot should use
[default: /etc/rsnapshot.conf]
"""
然后用户也会看到默认值是什么。
我成功了。最后的问题是我使用制表符来格式化我的使用文档字符串:
"""
\t\t\tUsage:
\t\t\trsnapshot-once [-c CFGFILE] (sync|hourly|daily|monthly)
\t\t\tOptions:
\t\t\t-c CFGFILE specify the configfile that rsnapshot should use
"""
当我将其更改为:
"""
Usage:
rsnapshot-once [-c CFGFILE] (sync|hourly|daily|monthly)
Options:
-c CFGFILE specify the configfile that rsnapshot should use
"""
它工作正常...
在弄清楚问题出在哪里后,我发现了一个类似的问题:https://github.com/docopt/docopt/issues/368
编辑:从功能的角度来看,当不使用制表符时,参数被正确解析。但如果调用错误,则只打印文档字符串的 "Usage:" 部分。 "Options:"-部分不是。你们中的任何人都可以确认吗?
例如,比较这些变体:
1a。 Valid call
1b。 Invalid call(option part is not printed)
我正在尝试学习 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 版本有关。关于符号你几乎在正确的轨道上,只是缺少一些小细节。
在选项之前,应该有一行 "Options:"。 Docopt 寻找这个,并解释后面的行。在选项部分也可以设置选项的默认值。
这是一个例子:
"""Usage:
rsnapshot-once [-c CFGFILE] (sync|hourly|daily|monthly)
Options:
-c CFGFILE specify the configfile that rsnapshot should use
[default: /etc/rsnapshot.conf]
"""
然后用户也会看到默认值是什么。
我成功了。最后的问题是我使用制表符来格式化我的使用文档字符串:
"""
\t\t\tUsage:
\t\t\trsnapshot-once [-c CFGFILE] (sync|hourly|daily|monthly)
\t\t\tOptions:
\t\t\t-c CFGFILE specify the configfile that rsnapshot should use
"""
当我将其更改为:
"""
Usage:
rsnapshot-once [-c CFGFILE] (sync|hourly|daily|monthly)
Options:
-c CFGFILE specify the configfile that rsnapshot should use
"""
它工作正常...
在弄清楚问题出在哪里后,我发现了一个类似的问题:https://github.com/docopt/docopt/issues/368
编辑:从功能的角度来看,当不使用制表符时,参数被正确解析。但如果调用错误,则只打印文档字符串的 "Usage:" 部分。 "Options:"-部分不是。你们中的任何人都可以确认吗?
例如,比较这些变体:
1a。 Valid call
1b。 Invalid call(option part is not printed)