如何在Python中读取多个相同标志的命令行参数?
用户应该能够像这样调用Python脚本:
python myScript.py -i inputFile.txt -k string1 -k string2 -k string3 -o outputFile.txt
或者像这样:
python myScript.py -i inputFile.txt -o outputFile.txt -k string1 -k string2
在脚本内部,我想读取“-i”参数、“-o”参数,并把所有的“-k”参数(数量不固定)放到一个有序的列表里。
我想以一种干净的方式来实现这个功能(我知道我可以自己从头写,但我更希望使用一个已经存在的库或模块)。
我必须使用Python 2.4.3,并且想用getopt(如果没有类似的也可以)。我不能下载argparse库。
2 个回答
0
假设你可以安装 argparse
,那么唯一需要注意的就是你要能够多次指定一个参数。 argparse
通过它的 "append"
操作来完美解决这个问题:
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-k', action='append')
_AppendAction(option_strings=['-k'], dest='k', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args(['-k', 'foo', '-k', 'bar'])
Namespace(k=['foo', 'bar'])
1
根据我问题中的限制(使用Python 2.4.3,并且不能安装argparse这个库),我这样做让它成功运行了:
from optparse import OptionParser
parser = OptionParser()
parser.add_option('-f', action='append')
parser.add_option('-i', action='store')
parser.add_option('-o', action='store')
(options, args) = parser.parse_args()
print options
print args
假设有这样一个命令行:
python test_argparse.py -f hi -f bye -i input1 -i input2 -o output1 -o output2
我得到了:
{'i': 'input2', 'o': 'output2', 'f': ['hi', 'bye']}
[]