서브 프로세스를 (ProcessBuilder
통해) 시작하고 다른 스레드의 I/O (Process.getInputStream(),Process.getErrorStream(),Process.getOutputStream()
) 스트림을 처리하는 Java 프로그램을 작성했습니다.자바 서브 프로세스 콘솔에 여분의 출력
내 java-program은 서버로 작동하며 하위 프로세스에서 콘솔에 여분의 출력을 보내지 않고 IDE 콘솔에서 IDE의 콘솔로 제대로 작동하지만 Windows 또는 Windows에서 java -jar ...
프로그램을 실행하려고하면 리눅스 콘솔, 하위 프로세스는 내 프로그램과 콘솔에 출력을 씁니다.
P. 내가 파이썬 스크립트 파일을 자바에서 실행합니다. 예를 들어 파이썬 스크립트 스크립트는 "Hello World"라는 테스트 문자열을 1000 번 인쇄합니다. 내 프로그램이 잘 처리하지만 콘솔에서도 결과를 볼 수 있습니다.
어떻게 든 프로세스에서 분리해야하는 "콘솔"이 있습니까?
UPDATE :
여기내가 파이썬을 실행하기위한 ProcessBuilder를 얻을 (I 매개 변수로 스크립트의 디렉토리를 통과) : 여기
private ProcessBuilder getBuilder(File directory) {
return new ProcessBuilder("python", "-u").directory(directory);
}
내가 빌더에서 프로세스를 시작하고 추가 치료 ( 스크립트의 디렉토리를 전달하고 스크립트에 args)를 반환합니다.
public Process execute(Path dir, String... args) {
if (!Files.exists(dir) || !Files.isDirectory(dir))
throw new IllegalArgumentException("Provided path " + dir + " is not a directory or doesn't exist");
ProcessBuilder builder = getBuilder(dir.toFile());
if (args.length > 0) {
builder.command().addAll(Arrays.asList(args));
}
try {
return builder.start();
} catch (IOException io) {
io.printStackTrace();
return null;
}
}
i=0;
while True:
if i%1000000==0:
print ('Hello, world!')
i+=1
그들이 다른 주제에 있었다 표준 gobblers 모습 때문에 sence 내 스트림 핸들러가 게시 할 경우 나도 몰라하지만 그들은에 처리 출력/오류 읽기 : 여기테스트 바보 스크립트입니다 대기열에서 다른 대기열에서 입력을 가져오고 Java 프로그램은 대기열을 처리하고 로거 메시지를 제외하고 콘솔에 출력하지 않습니다.
하지만 하위 프로세스 자체가 콘솔에 쓰는 것 같지만 어쩌면 틀 렸습니다.
자바 코드를 보여줘야 사람들이 당신이 말하는 것에 대해 생각할 수 있습니다. –
다음과 같이 : Java 코드 (최소한 관련 부분)를 보여줍니다. [redirectOutput()'] (https://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html#redirectInput%28java.lang.ProcessBuilder.Redirect%29)를 올바르게 설정 했습니까?) 및 ['redirectError()']] (https://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html#redirectError%28java.lang.ProcessBuilder.Redirect%29)? – dhke
@dhke Process 객체를 얻은 다음 process.getOutputStream(), process.getInputStream(), process.getErrorStrem()을 통해 IO를 가져옵니다. –