'The output in wrapped function isn't printed between decorator
I don't know why the output in wrapped function hasn't been printed among decorator, my codes as below:
from functools import wraps
checkresultfile = './checkres1.log'
def log_detection_res(detect_items=''):
def process_reminder_decorator(check_func):
@wraps(check_func)
def addingReminder(*args, **kwargs):
process_begin_reminder = "=" * 10 + detect_items + "begin" + "=" * 10
process_stop_reminder = "=" * 10 + detect_items + "end" + "=" * 10
with open(checkresultfile, 'a') as res_file:
res_file.write(process_begin_reminder + '\n')
check_func(*args, **kwargs)
res_file.write(process_stop_reminder + '\n')
return check_func
return addingReminder
return process_reminder_decorator
@log_detection_res(detect_items='srlg conflict detection')
def relay_srlg_conflict_detect():
tplt = "{0:^30}\t{1:^20}\t{2:^20}\t{3:^10}\t{4:^20}\t{5:^20}\t{6:^20}\t{7:^20}\t{8:^10}"
output_file.write(
tplt.format("Conflict_Index", "INGRESS", "EGRESS", "Index", "Fault_Node", "Fault_link", "Router_Node",
"Route_link", "SRLG") + "\n")
with open(checkresultfile, 'a') as output_file:
relay_srlg_conflict_detect()
The output in file is:
==========srlg conflict detection begin==========
==========srlg conflict detection end==========
Conflict_Index INGRESS EGRESS Index Fault_Node Fault_link Router_Node Route_link SRLG
what I am expecting is:
==========srlg conflict detection begin==========
Conflict_Index INGRESS EGRESS Index Fault_Node Fault_link Router_Node Route_link SRLG
==========srlg conflict detection end==========
Solution 1:[1]
your problem is that you are trying to open on the same time the same file
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
from functools import wraps
checkresultfile = './checkres1.log'
def log_detection_res(detect_items=''):
def process_reminder_decorator(check_func):
@wraps(check_func)
def addingReminder(*args, **kwargs):
process_begin_reminder = "=" * 10 + detect_items + "begin" + "=" * 10
process_stop_reminder = "=" * 10 + detect_items + "end" + "=" * 10
with open(checkresultfile, 'a') as res_file:
res_file.write(process_begin_reminder + '\n')
check_func(output_file=res_file, *args, **kwargs)
res_file.write(process_stop_reminder + '\n')
return check_func
return addingReminder
return process_reminder_decorator
@log_detection_res(detect_items='srlg conflict detection')
def relay_srlg_conflict_detect(output_file):
tplt = "{0:^30}\t{1:^20}\t{2:^20}\t{3:^10}\t{4:^20}\t{5:^20}\t{6:^20}\t{7:^20}\t{8:^10}"
output_file.write(
tplt.format("Conflict_Index", "INGRESS", "EGRESS", "Index", "Fault_Node", "Fault_link", "Router_Node",
"Route_link", "SRLG") + "\n")
relay_srlg_conflict_detect()
output
==========srlg conflict detectionbegin==========
Conflict_Index INGRESS EGRESS Index Fault_Node Fault_link Router_Node Route_link SRLG
==========srlg conflict detectionend==========
Solution 2:[2]
The order you open the file is wrong.
Try this:
from functools import wraps
checkresultfile = './checkres1.log'
def log_detection_res(detect_items=''):
def process_reminder_decorator(check_func):
@wraps(check_func)
def addingReminder(*args, **kwargs):
with open(checkresultfile, 'a') as res_file:
res_file.write('=begin=' + '\n')
check_func(*args, **kwargs)
with open(checkresultfile, 'a') as res_file:
res_file.write('=end=' + '\n')
return check_func
return addingReminder
return process_reminder_decorator
@log_detection_res(detect_items='srlg conflict detection')
def relay_srlg_conflict_detect():
with open(checkresultfile, 'a') as output_file:
output_file.write('ctx' + "\n")
relay_srlg_conflict_detect()
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Beny Gj |
Solution 2 | Michael H |