Option Parser与参数

时间:2018-06-04 15:28:14

标签: python optionparser

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

#!/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())

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

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

python test.py
FILES_PATTERN None
Usage: test.py [options]

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

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

python test.py --fil "a_pattern_for_files"
FILES_PATTERN a_pattern_for_files

我想我应该有如下错误

python test.py --fl "a_pattern_for_files"
Usage: test.py [options]

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

当我使用 - fil 而不是正确的参数 - files 时,为什么我没有从 OptionParser 中收到错误?< / p>

不仅我没有收到错误,而且变量文件存储了值: a_pattern_for_files (打印出来)。

我希望参数文件具有值:无(默认),除非在命令行 - 文件存在

1 个答案:

答案 0 :(得分:1)

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

在文档中几乎没有提及,也没有选项可以将其关闭。 argparse有一个option可以将其关闭,但仅限于Python 3.5 +。