Próbuję wdrożyć opcję, która zapisze wyjście konsoli dodatkowo do pliku. (, jeśli jest aktywowana)

Znalazłem dwa sposoby: 1. Aby użyć modułu rejestrowania 2. Aby napisać taką jaką:

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()  

Ale mam problem. Niektóre elementy kodu będą wykonywać nowy proces. W ten sposób nie łapią swoich wydruków.

Kiedy zaczynam swój program

"myscript.py > mylog.txt"

To działa. Dostał wszystkie odbitki. Ale jak mogę symulować to funkcjonalnie w moim skrypcie?

1
bob morane 7 listopad 2011, 17:00

3 odpowiedzi

Najlepsza odpowiedź

Jeśli poprawnie rozumiem, chcesz przekierować stdout innego procesu, który zaczniesz?

Wtedy wszystko, co musisz zrobić, to użyć

subprocess.Popen(...)

Komenda. Następnie użyjesz z nim klasy MyWriter.

1
Ilya Smagin 7 listopad 2011, 13:22

Moja sugestia byłaby użycia modułu rejestrowania, aby użyć Sockethandler i Aby nacisnąć na serwer socket, który napisać odebrane dzienniki do pliku.

Mam nadzieję, że to pomoże

1
luc 7 listopad 2011, 13:45

Problem Prawdopodobnie musi zostać rozwiązany, w jaki sposób wykonujesz nowy proces, albo potrzebujesz zebrać wyjście z podtytusu w procesie głównym, lub przekazać nazwę pliku do podseksualności. Możesz użyć zmiennych środowiskowych dla nazwy pliku zamiast przekazywania go jako argumentu, to będzie łatwy dostęp do pliku dziennika w podskusku.

0
Ski 7 listopad 2011, 13:06