【问题标题】:python get opt long option onlypython getopt 仅长选项
【发布时间】:2014-05-24 10:57:10
【问题描述】:

我想使用 getopt 从命令行参数中获取输入,只有 long 选项

示例:./script --empid 123

options, args = getopt.getopt(sys.argv[1:],['empid='])
    for opt, arg in options:
        print 'opts',opt
        if opt in ('--empid'):
            emp_Id = arg

上面的代码出现getopt.GetoptError: option --empid not recognised 错误。可能出了什么问题?

【问题讨论】:

    标签: python getopt getopt-long


    【解决方案1】:

    你没有阅读getopt.getopt的文档:

    getopt.getopt(args, options[, long_options])

    解析命令行选项和参数列表。 [...]

    long_options,如果指定,必须是一个字符串列表,其中包含应支持的长选项名称。领先-- 选项名称中不应包含字符。长选项 需要参数的后面应该跟一个等号 (=)。 不支持可选参数。 只接受长选项, options 应该是一个空字符串。

    所以你必须这样做:

    options, args = getopt.getopt(sys.argv[1:], "", ['empid='])
    

    引用getopt的文档:

    注意

    getopt 模块是一个命令行选项解析器,其 API 是 旨在让 C getopt() 函数的用户熟悉。用户 不熟悉 C getopt() 函数或想要 编写更少的代码并获得更好的帮助,错误消息应该考虑改用argparse 模块。

    argparse的使用示例:

    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('--empid', type=int)
    parser.add_argument('positionals', nargs='*')
    args = parser.parse_args()
    print(args.positionals, args.empid)
    

    此模块getopt 更灵活、更先进,同时更易于使用。

    【讨论】:

      【解决方案2】:

      long_optionsgetopt.getopt的第三个参数:

      第一行应该是:

      options, args = getopt.getopt(sys.argv[1:], '', ['empid='])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-29
        • 1970-01-01
        • 1970-01-01
        • 2021-04-08
        • 2011-12-01
        • 1970-01-01
        相关资源
        最近更新 更多