python仅获取opt long选项

use*_*829 1 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
Run Code Online (Sandbox Code Playgroud)

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

Bak*_*riu 5

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

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

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

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

因此,您必须执行以下操作:

options, args = getopt.getopt(sys.argv[1:], "", ['empid='])
Run Code Online (Sandbox Code Playgroud)

引用以下文档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)
Run Code Online (Sandbox Code Playgroud)

该模块更加灵活,先进,同时更易于使用getopt