0

この質問はリンクでフォローアップしています

#!/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-coderのスキンクロールを作成しますが、Python 2.7(開発マシンで使用)では機能しますが、このコードを実行しようとしているマシンでこのコードを実行しようとするとこのコードを本番環境で実行すると、コードが実行されませんでした。

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

2.7では機能しません。

インターネットの達人の皆さん、Python 2.6でこれを機能させる方法は?(2.7にアップグレードすることはオプションではありませんが、もっと重要なことに、適切なPythonを作成したいので)

4

1 に答える 1

3

dict()ジェネレーター式で a を使用します。

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

ジェネレーター式は(key, value)2 つの値のタプルを作成します。これは 2.6 と 2.7 (または python 3) の両方で機能します。

于 2013-01-16T12:17:42.053 に答える