У меня есть функция, в которой я вызываю некоторые функции из того же модуля или некоторых других модулей:
from __future__ import print_function
def func():
print("Inside func")
def my_func():
print("Starting inside my_func ")
func()
print("In my_func")
func()
Выполнение my_func
выводит это:
Starting inside my_func
Inside func
In my_func
Inside func
Но я быхочу только видеть
Starting inside my_func
In my_func
Итак, я хочу отключить все отпечатки, кроме тех, которые сделаны непосредственно в функции my_func()
.Это может включать в себя рекурсивные вызовы функции.Поэтому что-то делать с уровнем стека не получится.
Я могу подумать о том, чтобы сделать это
def func():
print("Inside func")
def my_print(*args):
print(*args)
def my_func():
global my_print, print
my_print("Starting inside my_func ")
print = functools.partial(print, file=open(os.devnull, 'w'))
func()
print = functools.partial(print, file=sys.stdout)
my_print("In my_func")
print = functools.partial(print, file=open(os.devnull, 'w'))
func()
print = functools.partial(print, file=sys.stdout)
Но это включает в себя изменение кода функции и кажется немного хакерским.В идеале я хотел бы сделать это, используя декоратор, без необходимости изменять код функции.
Наиболее естественным способом было бы найти отпечатки, не вызванные в my_func
, и заставить их выводить на os.devnull
вобертка.Но я не могу найти, как это сделать.Заранее спасибо.