程序:
import sys, ast, getopt, typesdef main(argv): arg_dict={} switches={'li':list,'di':dict,'tu':tuple} singles=''.join([x[0]+':' for x in switches]) long_form=[x+'=' for x in switches] d={x[0]+':':'--'+x for x in switches} try: opts, args = getopt.getopt(argv, singles, long_form) except getopt.GetoptError: print "bad arg" sys.exit(2) for opt, arg in opts: if opt[1]+':' in d: o=d[opt[1]+':'][2:] elif opt in d.values(): o=opt[2:] else: o ='' print opt, arg,o if o and arg: arg_dict[o]=ast.literal_eval(arg) if not o or not isinstance(arg_dict[o], switches[o]): print opt, arg, " Error: bad arg" sys.exit(2) for e in arg_dict: print e, arg_dict[e], type(arg_dict[e])if __name__ == '__main__': main(sys.argv[1:])命令行:
python py.py --l='[1,2,3,[1,2,3]]' -d "{1:'one',2:'two',3:'three'}" --tu='(1,2,3)'输出:
args: ['--l=[1,2,3,[1,2,3]]', '-d', "{1:'one',2:'two',3:'three'}", '--tu=(1,2,3)']tu (1, 2, 3) <type 'tuple'>di {1: 'one', 2: 'two', 3: 'three'} <type 'dict'>li [1, 2, 3, [1, 2, 3]] <type 'list'>此代码段将执行短或长命令切换(例如
-l或),
--li=并在切换到Python数据结构(如列表,元组或字典)后解析文本。解析的数据结构最终以带有长格式切换键的字典结尾。
使用ast.literal_eval相对安全。它只能解析python数据定义。



