2011-12-20 4 views
2

나는 그저 끝내주는 것을 배우고있다.Groovy : stdout을 파일로 리다이렉트하지 않는다.

err = System.err  
resultStr = "test to print" 
err.println resultStr 
println resultStr 

그때 나는 출력에 두 번 resultStr 문자열을 얻을 리디렉션하지 않고 스크립트를 실행하는 경우 : 나는 매우 간단한 스크립트를 출력하는 println와 STDERR 및 STDOUT에 일부 텍스트가 있습니다. 내가 test > test.txt과 출력을 파일로 리디렉션하는 경우

는 결과 문자열 출력, TEST.TXT가 생성 (OK) (OK) 한 시간을 표시하지만, 을합니다. 나는 println 대신에 System.out.println을 시도했지만 동일한 결과가 나타납니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

중요한 경우, 저는 Windows 7입니다. 다만, dir과 같은 표준 Windows 프로그램의 출력을 리디렉션하려고 시도한 경우 작동합니다.

그루비 버전 : 1.8.4 JVM : 1.7.0_02

UPDATE : 나는 또한 자바 간단한 "Hello World" 클래스 (동일한 JVM)을 만들려고했다. 리디렉션이 작동합니다. 그래서 그루비에서 뭔가 있어야합니다.

업데이트 2 : 그는 윈도우 7에서 동일한 스크립트에서 성공적으로 리디렉션 할 수 @ socha23에서 주석 후, 나는 문제가 스크립트에 있지만 그루비 설치, 버전 충돌이나 OS에 아니라고 생각했다. 그래서 나는 similar question on SuperUser (교차 게시에 대해 유감스럽게 생각했지만 실제로는 경계선 문제라고 생각했습니다).

그런 다음 스크립트를 직접 test.groovy > test.txt으로 실행하면 리디렉션이 제대로 작동하지 않는다는 것을 알았습니다. 하지만 내가 groovy test.groovy > test.txt을 실행하면 작동합니다. 나는 아직도이 행동을 이해하고 가능한 경우 수정하고 싶습니다. SU 문제를 방문하십시오. 오늘 12/24는 아직도 답이 없습니다.

프로그래밍 문제가 아니라고 생각됩니다. 여기에서 삭제해야하는 경우 추천하십시오. 두 가지 질문은 서로를 참고합니다.

+0

종료하기 전에 스트림을 비우는 경우 파일이 비어 있습니까? –

+0

@ RogerLindsjö : 스크립트 끝 부분에'System.out.flush()'를 넣었지만 파일은 여전히 ​​비어 있습니다. – yuk

+0

Groovy 1.8.3이 설치된 Mac OS X에서는 잘 작동합니다. 윈도우 7에서 뭔가있는 것 같아. (놀랍지 만). –

답변

0

결과가 저에게 의미가 있으며, 표준 ">"리디렉션은 표준 출력에서만 작동합니다. bash와 필자는 DOS에서 표준 오류 출력을 파일로 재전송하려면 "2>"를 수행해야합니다. 다음 스크립트는 적어도 bash에서이를 증명합니다. 도스 커맨드 라인은 나에게 똑같이 작용했다.

System.out.println "Hello Standard Out" 
System.err.println "Hello Standard Err" 

println "Hello plain-jane println" 

간단한 리디렉션 검사는 "안녕하세요 표준 아웃"과 "안녕하세요 일반 제인에 println"을 보여주는 stdout.txt했지만 NOT "안녕하세요 표준 ERR"는이 콘솔에 나온다.

bobk-mbp:hello bobk$ groovy StderrAndOut.groovy > stdout.txt 
Hello Standard Err 
bobk-mbp:hello bobk$ 

내 다음 테스트는 명시 적으로 stdout2.txt 보여주는 "안녕하세요 표준 아웃"과 "안녕하세요 일반 제인에 println"및 stderr2.txt 보여주는 "안녕하세요 표준 ERR"의 결과로 표준 출력 및 표준 오류를 리디렉션합니다.

bobk-mbp:hello bobk$ groovy StderrAndOut.groovy > stdout2.txt 2>stderr2.txt 
bobk-mbp:hello bobk$ 

나는 결과가 VM 쉘과 함께 할 수있는 많은과 거의 무슨 당신이하려고하는 표준 자바의 어떤 다른 것을 놀란다.

+0

다음 링크는 유용합니다. http://www.robvanderwoude.com/redirection.php 및 http://www.cyberciti.biz/faq/redirecting-stderr-to-stdout/ –

+0

질문을 다시 읽으십시오. STDERR에 문제가 없으며 리디렉션하고 싶지 않습니다. 문제는 STDOUT을 리디렉션 할 때 파일이 만들어졌지만 비어 있고 stdout에 인쇄 된 문자열이 콘솔에 나타나지 않는 경우입니다. stderr에 대한 문자열이 예상대로 나타납니다. – yuk

+0

사실 새로운 정보로 질문을 업데이트해야합니다. 문제는 실제로 스크립트가 아니라 운영 시스템과 관련이있는 것처럼 보입니다. 잠시 후 다시 확인하십시오. – yuk

2

Windows 7 64 비트를 실행하고 있습니까?MS에서 제공하는이 핫픽스로 문제가 해결 된 경우 시도하십시오. http://support.microsoft.com/kb/971163/en-us 출력 리디렉션이 특정 프로그램에서는 작동하지 않지만 콘솔에서 출력되는 경우이 문제가 발생할 수 있습니다. (어떤 이유로 컴퓨터에 핫픽스가 설치되지 않습니다.)

내가 알기로는 Groovy를 직접 호출하면 관련 CreateProcessWithTokenW에 대한 API 호출이없는 반면 쉘을 사용하면 "test.groovy> file.txt",이 API 함수를 호출하여 버그가 발생합니다.

는 UPDATE :이 핫픽스는 윈도우 7 SP1에 포함되어 있는지 내가 그동안 발견

이는 당신과 내 컴퓨터에 설치되지 않습니다 이유입니다. 내가 발견 한 유일한 다른 관련 버그는 http://support.microsoft.com/kb/321788이지만 Windows XP에서 수정 된 것 같습니다.

다른 프로그램에서와 같은 문제가있어서 소스 코드를 변경하여 문제를 해결할 수 있지만 이해가되지 않는 방식으로 Windows의 출력 리디렉션 코드에 여전히 버그가있는 것으로 의심됩니다.

+0

감사합니다. 수정 프로그램을 다운로드했지만 OS가 지원되지 않는다고 말했습니다. Windows 7 Pro 64 비트 + SP1입니다. : (나중에 확인할 것입니다. – yuk

관련 문제