我已经为我的python脚本使用optparse
定义了一些选项。在我的脚本中,用户以任何顺序输入命令行参数,但我想以我预定义的方式排序。让我们说用户输入以下参数:
scriptname -g gvalue -n nvalue -s svalue -k kvalue -e evalue
当用户以任何顺序输入上述参数时,我想按以下方式排序:
-s svalue -g gvalue -k kvalue -n nvalue -e evalue
最终我随时都需要上述订单。
答案 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
的情况下实现相同的目标。