Мгновенное перенаправление в файл

Рейтинг: 1Ответов: 1Опубликовано: 04.04.2015

Есть python-скрипт:

from time import sleep

sleep(5)
print 'some_line1'
sleep(5)
print 'some_line2'

Выводит две строки с задержкой в 5 секунд.

Перенаправляем вывод в файл:

# python script.py > outfile.txt

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

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

Ответы

▲ 2Принят

Это эффект изменения типа буферизации при перенаправлении стандартного вывода в файл. Нужно принудительно выводить буфер в нужный момент.

Для Python посмотрите, например, https://stackoverflow.com/questions/230751/how-to-flush-output-of-python-print или погуглите (посмотрите соответствующую доку по нужной версии). Пример:

$ python -u script.py > outfile.txt

-u опция командной строки выключает буферы у стандартных потоков ввода/вывода.

Вообще, "ноги растут" из поведения FILE * (libc). Для более глубокого понимания могу посоветовать почитать man setbuf.