以我们预定义的方式对用户输入的命令行参数进行排序

时间:2014-07-11 13:58:49

标签: python optparse

我已经为我的python脚本使用optparse定义了一些选项。在我的脚本中,用户以任何顺序输入命令行参数,但我想以我预定义的方式排序。让我们说用户输入以下参数:

scriptname -g gvalue -n nvalue -s svalue -k kvalue -e evalue

当用户以任何顺序输入上述参数时,我想按以下方式排序:

-s svalue -g gvalue -k kvalue -n nvalue -e evalue

最终我随时都需要上述订单。

2 个答案:

答案 0 :(得分:1)

可能有更好的方法来获得你想要的东西。你不应该这样做。但这是修复:

我将使用argparse因为optparse已被弃用。 如果用户未指定该参数的值

,则此代码将显示None
## directory user$ ./argparse_ex.py -s foo -g bar -k quox -n woo -e testing123

import argparse
parser = argparse.ArgumentParser(description='Sorted Arguments')
parser.add_argument('-s', help='I will be printed if the user types --help')
parser.add_argument('-g', help='I will be printed if the user types --help')
parser.add_argument('-k', help='I will be printed if the user types --help')
parser.add_argument('-n', help='I will be printed if the user types --help')
parser.add_argument('-e', help='I will be printed if the user types --help')

args = vars(parser.parse_args())

sorted_args = [args['s'], args['g'], args['k'], args['n'], args['e']]
print sorted_args

## ['foo', 'bar', 'quox', 'woo', 'testing123']

<强> argparse documentation here

答案 1 :(得分:0)

假设optparse定义了每个值的命令,例如:

parser.add_option("-k", action="store", type="string", dest="kvalue")

并执行:

(options, args) = parser.parse_args()

然后options.kvalue将包含-k的相关用户输入参数。然后可以生成顺序的序列:

( getattr(options,name) for name in ('svalue', 'gvalue', 'kvalue', 'nvalue', 'evalue') )

或者,原始argv上的字符串比较可以在不使用optparse的情况下实现相同的目标。