[英]How to write a decorator for a function with an argument?
我想编写一个装饰器来将主 function 的标准输出重定向到特定的日志文件。 主 function 采用的参数是 - 项,我希望装饰器为主 function 的每个项分配不同的日志路径。 我如何实现这一目标?
目前我有:
def redirect_stdout(func):
def wrapper():
with open(f"{log_path}{item}.log", "w") as log, contextlib.redirect_stdout(log), contextlib.redirect_stderr(log):
func(item)
return wrapper()
@redirect_stdout
def main(item):
但我不确定 item 参数是如何进入装饰器的。 谢谢!
您正在寻找的内容如下所示
def redirect_stdout(func):
def wrapper(item):
with open(f"{log_path}{item}.log", "w") as log, contextlib.redirect_stdout(log), contextlib.redirect_stderr(log):
func(item)
return wrapper
要了解它是如何工作的,您需要正确理解装饰器的工作原理。 检查下面我试图解释装饰器是如何工作的。 ==>
我曾经表示这个是等价的。
@redirect_stdout
def main(item):
pass
== >
def main(item):
pass
main = redirect_stdout(main) = wrapper
---------
main(item) => wrapper(item)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.