如何在Python中使用相同的标志读取多个命令行参数?

时间:2014-09-11 03:55:22

标签: python parsing command-line-arguments getopt python-2.4

用户应该能够像这样调用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 :(得分: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']}
[]

答案 1 :(得分: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'])