Я попытался перенаправить весь вывод консоли указанной c части моего python кода в текстовый файл, следуя совету этого сообщения .
Согласно этому сообщению , он должен работать с contextlib.redirect_stdout (), но , когда первая команда print () появляется в моей пользовательской функции custom_function_with_internal_print_calls (), он выбрасывает объект AttributeError: 'str' не имеет атрибута 'write' .
dummy_file = "dummy_textfile.txt" # file to which the stdout shall be redirected
with contextlib.redirect_stdout(dummy_file):
# Direct print()-function call
print("Informative string which shall go to the textfile instead of the console.")
# Indirect print()-function calls (internally)
custom_function_with_internal_print_calls(**kwargs)
EDIT: В моем конкретном случае вместо функции print () в with-environment у меня есть пользовательская функция, которая имеет внутренние вызовы встроенной функции print () Python. Не должно иметь значения, появляется ли функция print () внутри другой функции или непосредственно на верхнем уровне, чтобы воспроизвести ошибку.
Параметры уже опробованы: Другие обходные пути не Похоже, это решение, которое я ищу, такое как
переопределение функции print () - или
написание декоратора для python 2.7 x (как я использую python 3.7x) или также
, перенаправляя функцию print () на файловый объект через print('Filename:', filename, file=f)
. Последнее означало бы в моем случае передать обработчик файла всем подфункциям в моей выбранной вложенной функции, что является слишком большой дополнительной модификацией кода для этого особого случая.
Я надеюсь, что смогу использовать просто среда with contextlib.redirect_stdout(dummy_file):
обернута вокруг моей функции, чтобы перенаправить каждый вывод консоли этой самой функции в dummy_file .
Документация contextlib.redirect_stdout () мне тоже не помогает Заранее спасибо за предложения.