report.py
if __name__ == "__main__":
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter, description = "CHECK-ACCESS REPORTING.")
parser.add_argument('--input','-i', help='Filepath containing the Active Directory userlist')
parser.add_argument('--timestamp', '-t', nargs='?',const="BLANK", help='filepath with environement varible set')
args, unknownargs = parser.parse_known_args(sys.argv[1:])
timestampchecker(args.timestamp)
#checking the value of cons.DISPLAYRESULT is TRUE
main()
timestampchecker功能:
def timestampchecker(status):
""" Check if the timestamp is to display or not from command line"""
if status is not None:
cons.DISPLAY_TIME_STAMP = True
此函数检查用户是否设置了 -t 参数。如果设置了,我将一个名为 cons.DISPLAYRESULT 的常量定义为true。
该功能运行良好,将常量值变为True。 但是在main函数中我已经实现了这个装饰器,它没有采用真正的值而是假的
timer.py
def benchmarking(timestaus):
def wrapper(funct):
def timercheck(*args, **kwarg):
if timestaus is True:
starttime=time.time()
funct(*args, **kwarg)
if timestaus is True:
print('Time Taken:',round(time.time()-starttime, 4))
return timercheck
return wrapper
我在report.py的main()方法中使用上面的装饰器修饰了一些方法。例如,这是在report.py中使用的类,并使用上面的装饰器进行装饰
class NotAccountedReport:
def __init__(self, pluginoutputpath):
""" Path where the plugins result are stored need these files"""
self.pluginoutputpath = pluginoutputpath
@benchmarking(cons.DISPLAY_TIME_STAMP)
def makeNotAccountableReport():
#some functionality
这里我将常量值传递给参数装饰器 虽然在被调试之前被测试被转换为True是假的 因此装饰器没有实现。问题出在哪儿 无法弄清楚
答案 0 :(得分:2)
您没有发布一个完整的最小可验证示例,因此可能还有其他内容,但如果您的意思是,在致电NotAccountedReport().makeNotAccountableReport()
时您不会得到您的时间" #34;打印然后它真的不是一个惊喜 - benchmarking
装饰器在定义函数时(导入模块时),在执行if __name__ == '__main__'
子句之前应用,所以当时您的命令行args尚未更新cons.DISPLAY_TIME_STAMP
。
如果你想要一个运行时标志来激活/停用装饰器的行为,显而易见的解决方案是检查装饰器中的cons.DISPLAY_TIME_STAMP
而不是将其作为参数传递,即:
def benchmarking(func):
def timercheck(*args, **kwarg):
if cons.DISPLAY_TIME_STAMP:
starttime=time.time()
result = func(*args, **kwarg)
if cons.DISPLAY_TIME_STAMP:
logger.debug('Time Taken: %s',round(time.time()-starttime, 4))
return result
return timercheck
class NotAccountedReport(object):
@benchmarking
def makeNotAccountableReport():
#some functionality