1

我想使用 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上述代码的错误错误。可能出了什么问题?

4

2 回答 2

6

您没有阅读以下文档getopt.getopt

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

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

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

所以你必须这样做:

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

引用以下文档getopt

笔记

getopt模块是命令行选项的解析器,其 API 旨在让 Cgetopt()函数的用户熟悉。不熟悉 Cgetopt()函数或希望 编写更少代码并获得更好帮助和错误消息的用户应考虑改用该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.

于 2014-05-24T11:03:27.477 回答
1

long_options是 的第三个参数getopt.getopt

第一行应该是:

options, args = getopt.getopt(sys.argv[1:], '', ['empid='])
于 2014-05-24T11:02:26.267 回答