Как смоделировать «myscript.py> mylog.txt» - PullRequest
1 голос
/ 07 ноября 2011

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

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

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

Ответы [ 3 ]

1 голос
/ 07 ноября 2011

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

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

subprocess.Popen(...)

команда. Тогда вы должны использовать свой класс MyWriter с ним.

1 голос
/ 07 ноября 2011

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

Надеюсь, это поможет

0 голосов
/ 07 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...