2011-10-07 4 views
2

출력이 파일로 리디렉션 된 상태에서 백그라운드에서 실행하고 싶은 간단한 Python 스크립트가 있습니다.sleep() 문을 사용하는 Python 스크립트는 백그라운드에서 실행될 때 로그되지 않습니다.

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

이 너무 오래 내 파이썬 스크립트에는 sleep 문이 없기 때문에 잘 작동 : 수면 문이 주석이다

#! /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 

내 질문은 왜 잠 문은 스크립트가 백그라운드에서 실행되는 경우 파일의 지시가되는 출력을 방지 가지는 않습니다, 그리고 나는이 라운드하는 방법을 얻을 수 있습니다 :이 항상 작동?

답변

3

출력이 손실되지 않고 단순히 파일에 도달하는 데 시간이 오래 걸립니다. 이것은 버퍼링과 관련이 있습니다. sleep을 사용하면 출력 버퍼가 플러시 할 충분한 데이터를 축적하는 데 오랜 시간이 걸립니다. 그냥 sleep()를 호출하기 전에 sys.stdout.flush()를 호출 할 경우, 즉 출력을 할 수 있습니다

바로 나타납니다

sys.stdout.flush() 
    time.sleep(60) 
1

아직 시도하지는 않았지만 잠자기 상태로 스크립트를 보내기 전에 sys.stdout.flush()을 사용해 볼 수 있습니다.

관련 문제