2015-01-25 2 views
0

tac 명령으로 표시 할 줄 수를 5로 제한하고이 결과를 새 파일에 저장하고 싶습니다. 이 명령은 위의 내 명령 창에서 잘 작동Python :이 깨진 파이프 오류를 어떻게 수정합니까?

tac /home/pi/log/log.txt | head -n 5 

... 내가 파이썬 파일을 통해 호출하고 난 tac: write error: Broken pipe 오류가 새 파일에 저장하려고하지만 ...

그 코드가 같은 모습입니다 : 그런데

while True: 
    db_file = open("/home/pi/log/heartbeat.txt", 'a') 
    db_file.write('#################\n') 
    db_file.write('LAST LOGs\n') 
    db_file.write('#################\n')   
    db_file.close() 

    statement = 'tac /home/pi/log/log.txt | head -n 5 ' 
    result = check_output(statement, shell=True) 
    db_file = open("/home/pi/log/heartbeat.txt", 'a') 
    db_file.write(result) 
    db_file.close() 
    sleep(1) 

, 내가 명령 watch 초마다 사용하고하면 새로운 콘텐츠를 계속 확인합니다.

어떻게 해결할 수 있습니까? "| 전술 꼬리 -N5 /home/pi/log/log.txt"

감사합니다,

+0

문제점을 재현 할 수 없습니다. 어떤 OS를 사용하고 있습니까? – Evert

+1

'tac'을 실행하기 전에 먼저 파일을 닫은 다음 나중에 추가하기 위해 다시 열어 두는 것이 좋습니다. – Evert

+0

안녕하세요. 나는 당신의 의견에 따라 몇 가지 변화를했습니다. 테스트 용으로 ubuntu14.04를 사용하고 있지만 내 목표는 Raspbian에서 실행하는 것입니다. 당신이 제안한 변경을 한 후에 나는 오류가 훨씬 줄어들지 만, 새로운 하나의 'tac : write error'(깨진 파이프없이)를 얻고있다. 고맙습니다! –

답변

-1

은 그래서 어쩌면 당신의 명령을 변경하는 것이 좋습니다, 전술이 큰 입력에 나쁜 일 것이라 생각합니다. (파이썬 ENV에 큰 로그 파일 작업과 파손 된 파이프 오류가 발생하는 경우 윌 전술은 추락 도착?)

+0

다음을 읽어보십시오. http://stackoverflow.com/help/how-to-answer – mertyildiran

1

당신은 당신의 문 명령이 modeification이 오류를 해결할 수 있습니다

변경에서 :

statement = 'tac /home/pi/log/log.txt | head -n 5 ' 

변경하려면 다음

statement = 'tail -n5 /home/pi/log/log.txt | tac | head -n 5 ' 
읽기를 중지 한계가 트리거 될 때 때문에 (특정 환경에서만 매니페스트 것 같은 즉각적인 파이썬 환경으로)

statement = 'tail -n5 /home/pi/log/log.txt | tac' 

오류가 일어나고있다 :

또한, 문으로 단축 할 수 버퍼 판독 사이클 동안. 트리거가 tac 명령을 닫기 전에 내용을 읽으므로 더 작은 파일에서는 발생하지 않습니다.

오류는 치명적이지 않습니다 ... 그냥 성가신 일입니다. 무시해도되고 제공된 해결 방법을 사용할 수도 있습니다.

관련 문제