Я пытаюсь реализовать опцию, которая дополнительно сохранит вывод консоли в файл. (если опция активирована)
Я нашел два способа: 1. использовать модуль регистрации 2. написать такой класс:
class MyWriter:
def __init__(self, stdout, filename):
self.stdout = stdout
self.logfile = file(filename, 'a')
def write(self, text):
self.stdout.write(text)
self.logfile.write(text)
def close(self):
self.stdout.close()
self.logfile.close()
Но у меня проблема. Некоторые фрагменты кода будут выполняться в новом процессе. И эти способы не поймают их отпечатки.
Когда я запускаю свою программу, как
"myscript.py > mylog.txt"
оно работает. Он получил все отпечатки. Но как я могу имитировать это функционально в моем скрипте?
Если я правильно вас понимаю, вы хотите перенаправить stdout
другого процесса, который вы начнете правильно?
Тогда все, что вам нужно сделать, это использовать
subprocess.Popen(...)
команда. Затем вы используете свой класс MyWriter
.
Мое предложение состояло в том, чтобы использовать модуль регистрации, использовать sockethandler и нажать на сервер сокета, который будет записывать полученные журналы в файл.
Я надеюсь, что это помогает
Проблема, вероятно, должна быть решена, как вы выполняете новый процесс, вам нужно либо собрать выходные данные из подпроцесса в основном процессе, либо передать имя файла для подпроцесса. Вы можете использовать переменные среды для имени файла вместо передачи в качестве аргумента, тогда будет легко получить доступ к файлу журнала в подпроцессе.