2011-01-21 2 views
19

줄을 출력하는 명령 줄 프로그램을 실행 한 다음 잠시 후에 그 행을 업데이트합니다. 하지만 루비를 사용하면 한 줄을 출력 한 다음 다른 줄을 출력하는 것처럼 보일 수 있습니다. 지금ruby를 사용하여 명령 프롬프트에 이전에 출력 한 행을 쓰십시오.

내가되는 것을 출력 :

Downloading file: 
11MB 294K/s 
12MB 307K/s 
14MB 294K/s 
15MB 301K/s 
16MB 300K/s 
Done! 

그리고 대신에, 나는이보고 싶어은 :

Downloading file: 
11MB 294K/s 

이 나중에 순간을 이어 :

Downloading file: 
16MB 300K/s 
Done! 

라인 다운로드 된 파일 크기 및 전송 속도가 목록 대신 매번 덮어 쓰여지는 것을 보여주는 루비 스크립트 출력 업데이트 된 값을 완전히 새로운 라인으로 보냅니다.

출력을 생성하는 데 현재 puts을 사용하고 있습니다.이 경우에는 분명히 설계되지 않았습니다. 이 결과를 얻을 수있는 다른 출력 방법이 있습니까?

답변

38

\r을 사용하여 커서를 줄의 시작 부분으로 이동하십시오. puts\n이 추가되어 사용되어서는 안되며 대신 print을 사용하십시오. 이처럼 :

print "11MB 294K/s" 
print "\r" 
print "12MB 307K/s" 

한 가지는하지만 명심 : 당신이 (이전의 출력을 덮어 패드에 공백 출력을 필요하므로 \r 아무것도 삭제하지 않는, 그냥, 다시 커서를 이동 더 길 경우).

기본적으로 \n이 표준 출력에 인쇄되면 버퍼가 비워집니다. 이제 print 다음에 STDOUT.flush을 사용해야 텍스트를 바로 인쇄 할 수 있습니다.

+1

이 해결책은 개행 문자가 출력되거나 프로그램이 종료 될 때까지 출력을 표시하지 않습니다. 이 예는 'print'123 '; sleep 5; 인쇄 "\ r"; "456"인쇄는 처음에 아무것도 인쇄하지 않고 5 초 후에 "456"을 인쇄합니다. 그래서 제게 많은 도움이되지 않습니다. –

+1

'STDOUT.flush'를 추가하여 즉시 출력으로 보냅니다. 나는 대답도 업데이트했다. – detunized

+0

아, 맞습니다. 그 고정 및 그 위대한 지금 일하는, 감사합니다! –

관련 문제