2013-01-16 5 views
1

Java Runtime.getRuntime(). exec (String) 명령을 사용하여 Festival을 실행 한 다음 OutputStreamWriter를 사용하여 outpustream에 일부 명령을 쓰려고합니다. 프로세스의stdin에 입력을 보내고 Java에서 전체 출력 받기 - Festival TTS

이 잘 작동, 나는 같은 것을 할 수 있어요 :이 작동 말할 수

Process p = Runtime.getRuntime().exec("festival"); 
Writer w = new OutputStreamWriter(p.getOutputStream()); 
w.append("(SayText \"Hello World\")"); 
w.flush(); 

분명히 방법이 스피커를 통해 텍스트를 말하는 것입니다.

내가 힘들게하는 일은 터미널에서 볼 수있는 텍스트 출력을 얻는 것입니다. 다른 출력 (예 : (voice.list))과 같은 텍스트를 출력하려고합니다. 아마도 stdout으로 출력 할 것입니다. 내가 만약 깨끗한 방법으로 전체 일을 할 것,

BufferedReader reader = new BufferedReader (new InputStreamReader(p.getInputStream())); 
w.append("(voice.list)"); 
w.flush(); 

String output = ""; 
String line = reader.readLine(); 
System.out.println(line); 

while ((line = reader.readLine()) != null) 
{ 
    System.out.println("Reading: " + line); 
    output += line; 
} 

합니다 (에서 System.out.println 그냥 디버깅을위한 것입니다 :

예를 들어, 나는 다음과 같은 방법으로의 BufferedReader를 사용하려고했습니다

내가 시도한 코드가 무엇이든 관계없이, 나는 축제에서 어떤 결과물도 얻을 수 없다. 다른 명령에서 출력을 얻을 수 있습니다. E.G. 나는이 코드를 http://en.allexperts.com/q/Java-1046/2008/2/Runtime-getRuntime-exec-cmd.htm으로 시도했지만 많은 다른 명령 (예 : ls)과 함께 작동하지만 Festival은 작동하지 않습니다.

어떻게하면이 기능을 사용할 수 있는지 알 수 있습니까?

감사합니다.

답변

0

축제는 stdout 대신 stderr에 텍스트를 출력 할 수 있습니다.

p.getErrorStream() 

p.getInputStream() 

를 교체하십시오