2009-10-16 12 views
5

mam pracę crontab wywoływania skryptu Python i wyprowadzania do pliku:Dlaczego bash kiedyś nie flush wyjście programu Pythona do pliku

python run.py &> current_date.log 

teraz czasami kiedy robię

tail -f current_date.log 

Widzę, że plik wypełnia dane wyjściowe, ale innym razem plik dziennika istnieje, ale pozostaje pusty przez długi czas. Jestem pewien, że skrypt Pythona drukuje rzeczy zaraz po uruchomieniu, a plik logu jest tworzony jako. Jakieś pomysły, dlaczego przez jakiś czas pozostają puste?

+2

Duplikat pytania: http://stackoverflow.com/questions/107705/python-output-buffering – Steven

Odpowiedz

12

Dane wyjściowe bufora języka Python, gdy wykryje, że nie jest on zapisywany do tty, a zatem plik dziennika może nie otrzymać natychmiastowego wyniku. Możesz skonfigurować skrypt do wypróżnienia wyjścia lub możesz wywołać pythona z argumentem -u, aby uzyskać niebuforowane dane wyjściowe.

$ python -h 

... 

-u  : unbuffered binary stdout and stderr (also PYTHONUNBUFFERED=x) 
     see man page for details on internal buffering relating to '-u' 

... 
8

Problem jest w rzeczywistości Python (nie bash) i jest projektowany. Domyślnie bufory Pythona. Uruchom pytona z -u, aby zapobiec buforowaniu.

Inną propozycją jest utworzenie klasy (lub funkcji specjalnej), która wywołuje flush() zaraz po zapisie do pliku dziennika.

Powiązane problemy