Тот факт, что вы ничего не видите, вероятно, связан с тем, что происходит буферизация.Таким образом, вы получаете вывод только каждые 4 Ko текста или около того.
Вместо этого попробуйте что-то вроде этого:
class OutputSplitter(object):
def __init__(self, real_output, *open_files):
self.__stdout = real_output
self.__fds = open_files
self.encoding = real_output.encoding
def write(self, string):
self.__stdout.write(string) # don't catch exception on that one.
self.__stdout.flush()
for fd in self.__fds:
try:
fd.write(string)
fd.flush()
except IOError:
pass # do what you want here.
def flush(self):
pass # already flushed
Затем украсьте sys.stdout этим классом с помощью следующего кода:
stdout_saved = sys.stdout
logfile = open("log.txt","a") # check exception on that one.
sys.stdout = OutputSplitter(stdout_saved, logfile)
Таким образом, каждый вывод (включая print
) сбрасывается в стандартный вывод и в указанный файл.Может потребоваться доработка, потому что я не тестировал эту реализацию.
Конечно, при печати сообщений можно ожидать (небольшое большую часть времени) снижения производительности.