2010-07-19 35 views
9

benim piton kodu genellikle şuna benzer:Kuru çalışma yöntemi? Şu anda

... 
if not dry_run: 
    result = shutil.copyfile(...) 
else: 
    print " DRY-RUN: shutil.copyfile(...) " 
... 
şimdi kuru koşucu yöntemiyle gibi bir şey yazma düşünmek

: Sonuç

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

Ama cmd ilk çalıştırılacak ve olduğu dry_runner yöntemine verildi.

Böyle bir yöntemi pythonik şekilde nasıl kodlayabilirim? işlevselliği çalışır

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

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

cevap

4

Bu jenerik sarıcı işlevini kullanabilirsiniz. Umarım bu yeterince açıktır:

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

Bu, ekranda mükemmel değil, ancak:

İlgili konular