Как я могу очистить Linux-буфер stdio-redirect уже запущенной программы Python?

У меня есть долго работающая программа, которую я не хочу убивать, но я хочу видеть результат, который она имеет (то есть одно предложение каждый час или около того).

Теперь я знаю, что мне нужно сбросить вывод в моем скрипте (например, sys.stdout.flush ()), но, поскольку я не хочу его убивать, я надеюсь, что для этого есть какая-то умная команда Linux. Из того, что я читал в Интернете, типичное поведение Linux - сбрасывать это при заполнении буфера.

Если никто не знает ответа, знаете ли вы, насколько велик этот буфер? Было бы неплохо хотя бы понять, когда нужно проверять :)

[это в Ubuntu 10]


person Dolan Antenucci    schedule 14.01.2012    source источник
comment
Обычно размер буфера составляет 4096 или 8192 байта. Если не считать ptrace, мало что можно сделать, не убивая его.   -  person Dave    schedule 14.01.2012


Ответы (1)


Чтобы узнать размер буфера для sys.stdout в Ubuntu 11.10, я использовал следующую простую программу:

import sys, time

buf_size = 1024
for counter in xrange(buf_size):
    sys.stdout.write('a')
time.sleep(3)

Эксперимент выглядит следующим образом:

  • Если buf_size слишком велик, часть строки сразу выводится на консоль, а оставшаяся часть - через три секунды.
  • Если buf_size слишком мало, весь вывод будет распечатан через три секунды.

В моем случае, когда размер буфера установлен на 1024, я не получаю никакого вывода, пока программа не выйдет, но когда я устанавливаю его на 1025, я вижу много символов, а через три секунды печатается еще один символ.

Следовательно, размер буфера в моей системе составляет 1024. В вашей системе, вероятно, то же самое, но вы можете повторить эксперимент для подтверждения.

Ниже приведены некоторые полезные ссылки на будущее:

person jcollado    schedule 14.01.2012