我想编写一个装饰器来将主函数的标准输出重定向到特定的日志文件。 main 函数采用的参数是 - item,我希望装饰器为 main 函数的每个 item 分配不同的日志路径。我如何实现这一目标?
目前我有:
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 参数如何进入装饰器。谢谢!
答案 0 :(得分:1)
您正在寻找的内容如下
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)