Как сочетать декораторы?

Я хотел бы, чтобы регистратор печатал номер белья, где вызывается метод 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})

0 ответов

Другие вопросы по тегам