계속해서 파일에 쓰고 있는데 다른 셸에서 추적하고 싶습니다. 하지만 파일이 쓰기용으로 열려 있는 한,
tail -f filename
파일을 다시 닫을 때까지 모든 새 줄을 표시할 수 없습니다.
불행하게도 초당 여러 번 파일을 열고 닫으면 데이터가 기록되는 것보다 더 빠르게 수신되는 지점까지 스크립트 속도가 느려지므로 프로세스에서 파일을 닫을 수 없습니다.
작성은 Python 프로그램에 의해 수행됩니다.
ser = serial.Serial('/dev/ttyACM2',9600)
f = open("filename", "a+")
while True:
s = ser.readline()
f.write(s + "\r\n")
작성 중인 파일의 내용을 볼 수 있는 방법이 있습니까?
답변1
를 사용하여 볼 수 없으면 tail
파일에 없는 것입니다.
그러나 Python 프로그램의 쓰기 버퍼에 있을 수 있습니다. 파일에 쓸 때의 관용적인 동작은 C 라이브러리가 모든 쓰기를 운영 체제에 즉시 보내는 대신 전체 블록(예: 4096바이트 등)이 기록될 때까지 출력을 버퍼링한다는 것입니다. 이렇게 하면 시스템 호출 오버헤드가 절약됩니다. 이는 Python에서도 비슷합니다. (C 라이브러리를 사용하는 것인지, 아니면 비슷한 버퍼링 자체를 수행하는 것인지는 잘 모르겠지만 최종 결과는 동일합니다.)
터미널로의 출력의 경우 기본값은 라인 버퍼링입니다. 개행 문자가 기록되면 버퍼가 기록됩니다. 물론 파일이 닫히면 모든 버퍼도 플러시되지만 이는 실제로 그다지 효율적이지 않습니다.
이 문제를 해결하려면 f.flush()
Every 이후에 호출하여 f.write()
버퍼링을 완전히 비활성화하세요. 이 질문에는 이를 수행하는 몇 가지 방법이 있습니다.출력 버퍼링 비활성화