[ruby] Ruby에서 $ stdout과 STDOUT의 차이점

Ruby에서 $stdout(앞에 달러 기호가 붙음)과 STDOUT(모두 대문자로) 의 차이점은 무엇 입니까? 출력 리디렉션을 수행 할 때 사용해야하는 것은 무엇이며 그 이유는 무엇입니까? 동일은 간다 $stderr하고 STDERR.

수정 : 방금 관련 질문을 찾았습니다 .



답변

$stdoutA는 전역 변수 의 현재 표준 출력을 나타낸다. STDOUTA는 일정한 표준 출력을 나타내는 일반적으로 기본 값입니다 $stdout.

으로 STDOUT일정한되고, 당신이 그것을 다시 정의하지 않아야하지만, 당신이 다시 정의 할 수 있습니다 $stdout오류없이 / 경고 (재 정의 STDOUT경고를 올릴 것이다). 예를 들어 다음을 수행 할 수 있습니다.

$stdout = STDERR

동일은 간다 $stderrSTDERR


따라서 질문의 다른 부분에 답하려면 상수가 아닌 전역 변수를 사용하여 출력을 리디렉션하십시오. 코드에서 다시 변경하도록주의하십시오. 전역 변수를 다시 정의하면 응용 프로그램의 다른 부분에 영향을 미칠 수 있습니다.


답변

  • STDOUT 전역 상수이므로 변경해서는 안됩니다.
  • $stdout 미리 정의 된 변수이므로 변경할 수 있습니다.

셸을 사용하여 리디렉션을 수행하는 경우 :

$ ruby test.rb > test.log

그러면 스크립트가 실행되기 전에 스크립트에 대한 파일 설명 자로 사용하는 것이 중요하지 않습니다.

그러나 Ruby 스크립트 내에서 OS의 STDOUT에 대한 파일 설명자를 변경하려는 경우, 예를 들어 현재 요일을 기준으로 회전하는 로그 파일 세트로 출력을 전송하려는 경우 다음을 확인해야합니다. 당신은 $stdout.


답변

모두 $stdoutSTDOUT다른 의미를 가지고있다. Ruby의 문서 는이 주제에 대해 매우 명확합니다.

  • $stdout – 현재 표준 출력.
  • STDOUT– 표준 출력. $ stdout의 기본값입니다.

표준 출력에 쓰려면 실제로 현재 표준 출력을 의미 하므로 $stdout.

STDOUT너무 쓸모가 없습니다. 에 대한 기본값을 저장합니다 $stdout. 재 할당 $stdout한 경우를 사용하여 이전 값으로 복원 할 수 있습니다 $stdout = STDOUT.

또한 사전 정의 된 변수가 하나 더 있습니다.

  • $>– 기본적으로 인쇄되는 printf의 기본 출력 $stdout.

그러나 Ruby 2.3에서는 단순히 $stdout. 재 할당 $stdout하면의 값이 변경 $>되고 그 반대의 경우도 마찬가지입니다.


답변