캐리지 리턴(^M)을 사용하여 텍스트 파일을 "렌더링"하고 출력을 파일에 저장

캐리지 리턴(^M)을 사용하여 텍스트 파일을 "렌더링"하고 출력을 파일에 저장

오랫동안 실행되고 기본적으로 끝에 "\n"이 없는 루프의 일부 텍스트를 인쇄하고 다음 반복에서는 "\r"을 인쇄하여 지우는 일종의 진행률 표시줄이 있는 Python CLI 프로그램이 있습니다. 해당 줄에 일부 텍스트를 다시 인쇄하는 등의 작업이 수행됩니다.

while some_condition:
    print "\rprocessed {} out of {}".format(done_counter, all_counter),

콘솔에서는 완벽하게 작동하지만 stdout을 파일로 리디렉션하면 당연히 "Processed... ^M"이 많이 표시됩니다. 내가 원하는 것은 모든 "^M"이 처리된 상태에서 콘솔에 표시되는 파일의 깨끗하고 "렌더링된" 표현을 얻는 것입니다. 나는 이러한 제어 문자를 제거하는 것이 아니라 텍스트에 적용하고 싶습니다.

현재 해결 방법으로 다음과 같이 합니다. tail -n<NUM_LINES> screenlog_file충분히 크게 만든 <NUM_FILES>다음 마우스로 "렌더링된" 텍스트를 선택하고 해당 개미 붙여넣기를 새 파일에 복사합니다. 이를 달성하는 더 편리한 방법이 있는지 궁금합니다.

편집하다

@Archemar 덕분에 발견했습니다.이것. 코드를 수정할 수 있기 때문에 현재 문제가 해결됩니다. 그러나 Linux 유틸리티만 사용하는 아이디어/해결 방법은 높이 평가됩니다.

답변1

이러한 응용 프로그램의 경우 실행기를 사용하고 script(출력을 파일로 리디렉션할 때 동작 변경을 방지하기 위해) typescriptsed 스크립트를 사용하여 결과 파일을 필터링합니다. 예를 들어 내 답변을 참조하십시오.Unix 유틸리티를 사용하여 프로그래밍 방식으로 ANSI 제어 코드를 파일에 "구울" 수 있습니까?,논의하다script2log.

댓글에 언급된 것과 같은 다른 예도 있습니다. 그러나 언급된 내용은 이 특별한 경우(캐리지 리턴 문자가 사용되는 경우)를 다루지 않습니다.불다텍스트), 그러나제거하다제어 문자.

관련 정보