Python使用getopt解析数字和选项

Python使用getopt解析数字和选项,python,getopt,Python,Getopt,我正在尝试向程序中添加命令行选项。程序应该同时接受数字列表和解析选项。例如,对程序的调用可能如下所示: python3 ./parsetest.py 4 3 v=100 4和3将以一种方式处理,而v=100命令将内部变量v设置为100。我发现getopt库应该具有以下功能:有更好/更简单的方法吗 当我试图像上面那样解析输入时,我认为getopt应该将触发其关键字的参数放在一个特殊的列表中,而不触发的参数则放在其他地方。但是,当我尝试按照上面的示例使用getopt时,无论我做什么,v=100选项

我正在尝试向程序中添加命令行选项。程序应该同时接受数字列表和解析选项。例如,对程序的调用可能如下所示:

python3 ./parsetest.py 4 3 v=100
4和3将以一种方式处理,而v=100命令将内部变量v设置为100。我发现getopt库应该具有以下功能:有更好/更简单的方法吗

当我试图像上面那样解析输入时,我认为getopt应该将触发其关键字的参数放在一个特殊的列表中,而不触发的参数则放在其他地方。但是,当我尝试按照上面的示例使用getopt时,无论我做什么,v=100选项似乎都不会触发特殊参数列表。当传递给getopt时,我希望将“v=100”字符串拆分为参数v和值100。例如,下面的print(arguments,values)命令的结果是:['4','3','v=100']。有值,但没有参数

这是我的密码:

import sys,getopt
v = 1e100
fullCmdArguments = sys.argv
argumentList = fullCmdArguments[1:]
unixOptions = "v:"  
gnuOptions = ["v="]
print(argumentList)
try:  
  arguments, values = getopt.getopt(argumentList, unixOptions, gnuOptions)
except getopt.error as err:  
  # output error, and return with an error code
  print (str(err))
  sys.exit(2)

print(arguments, values)
for currentArgument, currentValue in arguments:  
  print (currentArgument, currentValue)
  if currentArgument in ("-v", "v"):
    v = currentValue
  else:
    #Its an integer then, do something with it
    print()

如果可以使用
argparse
,则以下操作将起作用:

例子 使用
nargs
关键字参数可以将其设置为“+”,需要一个或多个数字。默认情况下,带连字符的
v
是可选的。如果不需要,可以添加
required=True
选项

用法 进一步阅读 有关argparse模块的更多信息,请查看:

  • 官方教程:
  • 模块文档:

关于您的问题:“有更好/更简单的方法吗?”
argparse
(也是一个内置模块)在命令行参数解析中非常流行。是否需要
getopt
,或者也可以使用
argparse
?请注意,选项的命令行用法是非标准的:
v
不是选项,但
v=100
将被解释为第三个参数。也许你的意思是
python3./parsetest.py4 3-v=100
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('numbers', type=int, nargs='+')
parser.add_argument('-v', type=int, default=-1)
args = parser.parse_args()

print(args.numbers)
print(args.v)

# due to the default set above, `args.v` will always have an int value
v = args.v
python my_file.py 1 2 3 5 -v=12
[1, 2, 3, 5]
12

python my_file.py 1 2 3 5
[1, 2, 3, 5]
-1