我正在为使用 docopt 的 CLI 添加使用模式的验证,但我似乎无法选择工作。我想验证:
- 输入文件存在
- 使用了有效的选项
- 如果添加了PATH,则该目录存在。
到目前为止,这是应用程序
"""DVget
Usage:
DVget [-s] FILE [PATH]
Process a file, return data based on selection
and write results to PATH/output-file
Arguments:
FILE specify input file
PATH specify output directory (default: ./)
Options:
-s returns sections
-p returns name-sets
-m returns modules
"""
import os
from docopt import docopt
from schema import Schema, And, Use, Optional, SchemaError
# START OF SCRIPT
if __name__ == "__main__":
arguments = docopt(__doc__, version="0.1")
#print(arguments)
schema = Schema({
'FILE': [Use(open, error='FILE should be readable')],
Optional('PATH'): And(os.path.exists, error='PATH should exist'),
'-': And(str, lambda s: s in ('s', 'p', 'm'))})
try:
arguments = schema.validate(arguments)
# process(arguments)
except SchemaError as e:
exit(e)
运行 DVget -s "c:\test.txt" 给我错误消息“PATH 应该存在”,即使在架构和 docopt 中使用 Optional 时也是如此。有什么建议么?