python只获得opt long选项

时间:2014-05-24 10:57:10

标签: python getopt getopt-long

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

示例:./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错误。可能出了什么问题?

2 个答案:

答案 0 :(得分:5)

您没有阅读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更易于使用。

答案 1 :(得分:1)

long_optionsgetopt.getopt的第三个参数:

第一行应该是:

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