2011-04-21 9 views
2

스크립트는 응답 내가 syslog에 무언가를 추가하는 경우에도 모든 라인을 기록하지 않습니다이 코드파이썬 하위 프로세스 읽기

p = subprocess.Popen('tail -f /var/log/syslog', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 

for line in p.stdout.readlines(): 
    print line, 
    time.sleep(1) 

을 가졌어요.

왜?

+0

다른 스레드에서 Popen을 실행해야합니까? – Mejmo

답변

5

readlines()는 프로세스에 eof가있을 때까지 반환되지 않으며, 인터럽트없이 끝내지 않는 끝 부분은 없을 것입니다.

당신은 당신의 루프를 변경할 수 있습니다 :. 각 라인 사이에 추가 1 초 간격을 원하는하지 않는 한있을 때까지의 readline는, 최소한의 자원을 사용하여, 차단 등의 수면에 대한 필요가

while True: 
    print(p.stdout.readline()) 

없다 유효한 가득 차있는 선.

관련 문제