Как смоделировать «myscript.py> mylog.txt»

1

Я пытаюсь реализовать опцию, которая дополнительно сохранит вывод консоли в файл. (если опция активирована)

Я нашел два способа: 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"

оно работает. Он получил все отпечатки. Но как я могу имитировать это функционально в моем скрипте?

  • 0
    Как эти процессы порождаются? Вы сами порождаете эти процессы или их вызывает другой код поддержки?
Теги:
logging

3 ответа

1
Лучший ответ

Если я правильно вас понимаю, вы хотите перенаправить stdout другого процесса, который вы начнете правильно?

Тогда все, что вам нужно сделать, это использовать

subprocess.Popen(...)

команда. Затем вы используете свой класс MyWriter.

  • 0
    Я использую также этот класс в моем новом процессе. Оно работает. Спасибо вам, ребята.
1

Мое предложение состояло в том, чтобы использовать модуль регистрации, использовать sockethandler и нажать на сервер сокета, который будет записывать полученные журналы в файл.

Я надеюсь, что это помогает

  • 0
    хорошая идея. Спасибо
0

Проблема, вероятно, должна быть решена, как вы выполняете новый процесс, вам нужно либо собрать выходные данные из подпроцесса в основном процессе, либо передать имя файла для подпроцесса. Вы можете использовать переменные среды для имени файла вместо передачи в качестве аргумента, тогда будет легко получить доступ к файлу журнала в подпроцессе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню