2013-01-16 58 views
0

这个问题是在link使代码的Python 2.6兼容

#!/usr/bin/env python 

import argparse 
import sys 
import itertools as IT 
from snemail import * 

parser = argparse.ArgumentParser(
     prog='snemail', 
     usage='%(prog)s [-h] [--usage] action target [input]', 
     epilog="refer to '%(prog)s usage' for examples of how to run snemail" 
     ) 
parser.add_argument('action', metavar='action', nargs='?', type=str, choices=('list', 'add', 'remove'), help="list | remove | add") 
parser.add_argument('target', metavar='target', nargs='?', type=str, choices=('domain', 'forwarding', 'transport', 'user', 'all'), help="domain | forwarding | transport | user") 
parser.add_argument('input', nargs='?', type=str, default=None, help="required input to go with the 'remove' and 'add' flags. 'list' requires no input field") 
parser.add_argument('--usage', action='store_true', help="show usage examples for snemail") 
args = parser.parse_args() 

if args.usage: 
     usage() 
     sys.exit(0) 
if args.action is None or args.target is None: 
     parser.print_help() 
     sys.exit(0) 
if args.target == 'all': 
     all_list() 
     sys.exit(0) 
if len(sys.argv) >= 3: 
     input = args.input 
     input = input.split(',') 
else: 
     input = None 

def usage(): 
     print 'usage info here' 

targets = 'domain forwarding transport user'.split() 
actions = 'list add remove'.split() 

dispatch = {key:globals()['%s_%s' % key] for key in IT.product(targets, actions)} 

if input is not None: 
     dispatch.get((args.target, args.action), usage)(input) 
elif args.action is not None and args.target is not None: 
     parser.print_help() 
     sys.exit(0) 

跟进此代码可能会做一个专业的蟒蛇编码器的皮肤爬行,但它为我工作,在Python 2.7版(我用我的开发机),但是当我试图把该要运行这个金码的机器上执行该代码,它并没有因为

dispatch = {key:globals()['%s_%s' % key] for key in IT.product(targets, actions)} 

不工作2.7执行代码。

亲爱的互联网大师,如何使这项工作在Python 2.6上? (因为升级到2.7是不是一种选择,但更重要的是,我想写出正确的Python)

回答

3

使用dict()与发电机的表达:

dispatch = dict((key, globals()['%s_%s' % key]) for key in IT.product(targets, actions)) 

生成器表达式生成(key, value) 2元组值;这可以在2.6和2.7(或者python 3)中使用。