干跑方法?

时间:2010-07-19 09:24:59

标签: python

目前我的python代码通常如下所示:

...
if not dry_run:
    result = shutil.copyfile(...)
else:
    print "   DRY-RUN: shutil.copyfile(...) "
...

我现在考虑写一些像干跑者的方法:

def dry_runner(cmd, dry_run, message, before="", after=""):
    if dry_run:
        print before + "DRY-RUN: " + message + after
     # return execute(cmd)

但是cmd将首先被执行,结果将被赋予dry_runner方法。

如何以pythonic方式编写这样的方法?

2 个答案:

答案 0 :(得分:4)

您可以使用此通用包装函数:

def execute(func, *args):
    print 'before', func
    if not dry:
        func(*args)
    print 'after', func

>>> execute(shutil.copyfile, 'src', 'dst')

答案 1 :(得分:4)

这在显示方面并不完美,但功能有效。希望这很清楚:

dry = True

def dryrun(f):
    def wrapper(*args, **kwargs):
        if dry:
            print "DRY RUN: %s(%s)" % (f.__name__, 
                                       ','.join(list(args) + ["%s=%s" % (k, v) for (k, v) in kwargs.iteritems()])) 
        else:
            f(*args, **kwargs)
    return wrapper

import shutil
copyfile = dryrun(shutil.copyfile)

copyfile('a', 'b')