我正在尝试学习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)
看来,我正在误解一些东西。谁能给我提示,我做错了什么?
谢谢
您在此处给出的作品的示例。因此,Maye与您正在使用的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]
"""
然后,用户还将看到默认值是什么。
我使它起作用。最后,问题是我使用选项卡将用法格式化docstring格式化:
"""
tttUsage:
tttrsnapshot-once [-c CFGFILE] (sync|hourly|daily|monthly)
tttOptions:
ttt-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
"""
它可以正常工作...
我发现问题是什么后,我发现了一个类似的问题:
编辑:从功能的角度来看,当不使用选项卡时正确解析了参数。但是,如果呼叫是错误的,只有"用法:" - docstring的一部分是打印的。"选项:" - 部分不是。你们中的任何人都可以确认吗?
例如,比较这些变体:
1a。有效的电话
1B。无效呼叫(未打印选项部分)
2a。有效的电话(但不工作)
2b。无效的呼叫(如预期打印文本)