首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >选项解析器与参数不匹配

选项解析器与参数不匹配
EN

Stack Overflow用户
提问于 2018-06-04 23:28:14
回答 1查看 296关注 0票数 1

我有一个简单的python (v2.7)脚本(test.py)

代码语言:javascript
复制
#!/usr/bin/python

import sys
from optparse import OptionParser

def main():
    parser = OptionParser()
    parser.add_option("--files", dest="files", 
                      metavar="FILES", default=None, 
                      help="A file pattern matching ottcall logs.")
    (options, args) = parser.parse_args()


    print "FILES_PATTERN %s" % options.files

    if not options.files:
        parser.error("Files_pattern option is mandatory - Abort execution.")

    return 0

if __name__ == "__main__":
    sys.exit(main())

用户必须提供文件模式或文件名

如果缺少选项,则在命令行中运行脚本返回错误:

代码语言:javascript
复制
python test.py
FILES_PATTERN None
Usage: test.py [options]

test.py: error: Files_pattern option is mandatory - Abort execution.

如果选项文件缺少一些字母文件(--而不是--):

代码语言:javascript
复制
python test.py --fil "a_pattern_for_files"
FILES_PATTERN a_pattern_for_files

我想我应该会有一个类似下面的错误

代码语言:javascript
复制
python test.py --fl "a_pattern_for_files"
Usage: test.py [options]

test.py: error: no such option: --fl

当我使用--files而不是正确的参数--files时,为什么我不能从OptionParser得到一个错误?

不仅我没有得到错误,而且变量文件存储了值:a_pattern_for_files (它是打印的)。

我希望参数文件的值为:(默认值),除非在命令行中存在None -- files None

EN

回答 1

Stack Overflow用户

发布于 2018-06-05 06:19:07

optparse允许缩写形式的长选项。--fil--files的前缀,而不是程序支持的任何其他长选项的前缀,因此--fil被视为等同于--files

文档中几乎没有提到这一点,也没有关闭它的选项。argparse有一个option来关闭它,但只有在Python 3.5+中才有。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50684029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档