Как сочетать декораторы?
Я хотел бы, чтобы регистратор печатал номер белья, где вызывается метод subprocess.run, в приведенном ниже примере печатается номер белья, где определена функция переноса
#!/usr/bin/env python3
import logging, sys, functools, subprocess
logging.basicConfig(stream=sys.stdout, level=logging.INFO,style='{',format='⬬ {lineno:4d} ⬤ {pathname} ⬮\n{msg}')
def wrap_function(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
logging.info((args,kwargs)) # lineno=9
return func(*args ,**kwargs)
return wrapper
subprocess.run = wrap_function(subprocess.run)
subprocess.run('ls',timeout=10,shell=True) # lineno=15
Конечно, я получаю номер строки, где logging.info называется:
# current output:
#⬬ 9 ⬤ ./PycharmProjects/02.py ⬮
#(('ls',), {'timeout': 10, 'shell': True})
Есть ли способ определить аргумент msg для logging.info без вызова logging.info? Это вывод, который я хотел бы получить:
# output I would like to have:
#⬬ 15 ⬤ ./PycharmProjects/02.py ⬮
#(('ls',), {'timeout': 10, 'shell': True})