터미널 콘솔을 열고 명령을 읽고 쓸 수 있습니다. Java 프로세스에서 InputStream을 읽는 중
내가 좋아하는 몇 가지 질문을 읽어 그와 Java Process with Input/Output Stream터미널을 열고 콘솔에 명령을 전달하고 결과를 다시 인쇄 작은 응용 프로그램 수 빌드되었다, 그것은 검색 폴더와 같은 모든 시스템 COMAND 잘 작동 , 파일을 삭제하고 그런 것들을.
내가 가진 문제는 그 콘솔에서 다른 자바 프로그램을로드하고 출력을 읽어야하지만 그 프로그램은 java.util.logging.Logger를 사용하여 대부분의 출력을 보내고 내 발사 응용 프로그램은 ' 로거가 인쇄 한 것을 읽으십시오.
기본적으로 나는 다른 Java 응용 프로그램에 대한 래퍼처럼 만들려고합니다. 왜냐하면 그와 상호 작용하고 싶지만 변경할 수 없기 때문입니다.
도움 주셔서 감사합니다.
편집 여기
코드이지만, 나는 그것이 "정상"표준 출력에 일을 위해 작동하지만 콘솔에 출력 로거 지문 말했듯이 그 기본적 또한, 다른 질문에서 가져옵니다.
package launcher;
import java.io.*;
import java.util.Scanner;
public class Launcher {
public static void main(String[] args) throws IOException {
String line;
Scanner scan = new Scanner(System.in);
Process process = Runtime.getRuntime().exec("/bin/bash");
OutputStream stdin = process.getOutputStream();
InputStream stderr = process.getErrorStream();
InputStream stdout = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stdout));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));
while (scan.hasNext()) {
String input = scan.nextLine();
if (input.trim().equals("exit")) {
writer.write("exit\n");
} else {
writer.write("((" + input + ") && echo --EOF--) || echo --EOF--\n");
}
writer.flush();
line = reader.readLine();
while (line != null && !line.trim().equals("--EOF--")) {
System.out.println("Stdout: " + line);
line = reader.readLine();
}
if (line == null) {
break;
}
}
}
}
우리는 기본적으로 추측하고 있습니다 ... 로거가 STD OUT으로 인쇄 중이면이 작업은 가능하지만 파일에 로깅 중이거나 STD ERROR로 인쇄 중일 수 있습니다. , 또는 이러한 것들의 혼합을 수행합니다. – Jon