Сценарий Python с оператором sleep () не регистрируется при запуске в фоновом режиме - PullRequest
2 голосов
/ 07 октября 2011

У меня есть простой скрипт на Python, который я хотел бы запустить в фоновом режиме, с выводом, перенаправленным в файл, например,

./test.py > output.log 2>&1 &

Это прекрасно работает, пока в моем выражении нет оператора sleepСценарий Python:

#! /usr/bin/env python

import sys
import time
from time import gmtime, strftime

urls=['http://a', 'http://b','http://c', 'http://d', 'http://e' ]

def main():
    while True:
        for url in urls:
            try:
                print url
            except Exception, e:
                print "Error checking url " + url
                print e
        #time.sleep(60)


if __name__ == '__main__':
    main()

Если оператор сна не закомментирован, то при выполнении сценария в фоновом режиме выходные данные не генерируются.

Если он запускается на переднем плане, он работает нормально (со сном) и вывод отправляется на консоль или в файл, как я выбрал.

например, это всегда работает:

./test.py > output.log

У меня вопрос: почему использование оператора sleep предотвращает перенаправление вывода в файл, когда скрипт выполняется в фоновом режиме, и как я могу обойти это?

Ответы [ 2 ]

3 голосов
/ 07 октября 2011

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

Если вы позвоните sys.stdout.flush() непосредственно перед вызовом sleep(), это сразу отобразит вывод:

    sys.stdout.flush()
    time.sleep(60)
1 голос
/ 07 октября 2011

Я не пробовал, но вы можете попробовать использовать sys.stdout.flush() перед отправкой вашего скрипта в спящий режим.

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