首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >演练的方法?

演练的方法?
EN

Stack Overflow用户
提问于 2010-07-19 17:24:59
回答 2查看 11.1K关注 0票数 9

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

代码语言:javascript
复制
...
if not dry_run:
    result = shutil.copyfile(...)
else:
    print "   DRY-RUN: shutil.copyfile(...) "
...

我现在考虑写一些类似于干跑道方法的东西:

代码语言:javascript
复制
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方式编写这样的方法呢?

EN

回答 2

Stack Overflow用户

发布于 2010-07-19 19:30:18

你可以使用这个通用的包装器函数:

代码语言:javascript
复制
def execute(func, *args):
    print 'before', func
    if not dry:
        func(*args)
    print 'after', func

>>> execute(shutil.copyfile, 'src', 'dst')
票数 4
EN

Stack Overflow用户

发布于 2011-03-16 22:55:05

这在显示上并不完美,但其功能是有效的。希望这一点足够清楚:

代码语言:javascript
复制
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')
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3279806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档