Python 使用 getopt 解析数字和选项
Python parse numbers and options with getopt
我正在尝试向程序添加命令行选项。该程序应该接受数字列表和解析选项。例如,对该程序的调用可能如下所示:
python3 ./parsetest.py 4 3 v=100
4 和 3 将以一种方式处理,而 v=100 命令会将内部变量 v 设置为 100。我发现 getopt 库应该具有此功能:http://stackabuse.com/command-line-arguments-in-python/ 是否存在better/simpler 的方法吗?
当我尝试像上面那样解析输入时,我相信 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
,则以下将起作用:
例子
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
使用 nargs
关键字参数,您可以将其设置为需要一个或多个数字的“+”。默认情况下,带连字符的 v
是可选的。如果不需要,您可以添加 required=True
选项。
用法
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
进一步阅读
有关 argparse 模块的更多信息,您可以查看:
我正在尝试向程序添加命令行选项。该程序应该接受数字列表和解析选项。例如,对该程序的调用可能如下所示:
python3 ./parsetest.py 4 3 v=100
4 和 3 将以一种方式处理,而 v=100 命令会将内部变量 v 设置为 100。我发现 getopt 库应该具有此功能:http://stackabuse.com/command-line-arguments-in-python/ 是否存在better/simpler 的方法吗?
当我尝试像上面那样解析输入时,我相信 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
,则以下将起作用:
例子
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
使用 nargs
关键字参数,您可以将其设置为需要一个或多个数字的“+”。默认情况下,带连字符的 v
是可选的。如果不需要,您可以添加 required=True
选项。
用法
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
进一步阅读
有关 argparse 模块的更多信息,您可以查看: