我想使用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
错误。可能出了什么问题?
答案 0 :(得分:5)
您没有阅读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
更易于使用。
答案 1 :(得分:1)
long_options
是getopt.getopt
的第三个参数:
第一行应该是:
options, args = getopt.getopt(sys.argv[1:], '', ['empid='])