Java를 통해 바이너리 ('C'로 작성)를 실행하려고하는데 바이너리가 성공적으로 실행됩니다. 'Enter'키 입력이 누를 때까지 실행 제어를이 코드 (차단됨)로 리턴하지 않습니다. 이 문제 때문에 'prcs.waitfor() == 0'이 실행되지 않으며 사용자는 바이너리 실행이 성공했는지 여부를 알 수 없습니다. OutputStream에 'Enter'키 스트로크 (// r)를 보내기 위해 BufferedWriter를 만들려고했으나 작동하지 않습니다. 실행 제어가이 코드로 돌아가고 'prcs.waitfor() == 0'이 실행되도록하기 위해 여기서 수행해야하는 작업. 먼저 명령을 성공적으로 실행하는 데 의존하는 다른 명령을 실행해야합니다. 나는 그것이 r
다음 \
의이 :(ProcessBuilder를 통해 실행되는 'C'바이너리가 실행 흐름을 차단합니다.
// Start ProcessBuilder, 'str' contains a command
ProcessBuilder pbuilder = new ProcessBuilder(str);
pbuilder.directory(new File("/root/workspace/Project1"));
pbuilder.redirectErrorStream(true);
Process prcs = pbuilder.start();
AForm.execStatustext.append("\n=> Process is:" + prcs);
// Read output
StringBuilder out = new StringBuilder();
BufferedReader bfrd = new BufferedReader(new InputStreamReader(process.getInputStream()));
String current_line = null, previous_line = null;
while ((current_line = bfrd.readLine()) != null) {
if (!line.equals(previous_line)) {
previous_line = current_line;
out.append(current_line).append('\n');
//System.out.println(line);
}
}
//process.getInputStream().close();
// Send 'Enter' keystroke through BufferedWriter to get control back
BufferedWriter bfrout = new BufferedWriter(new OutputStreamWriter(prcs.getOutputStream()));
bfrout.write("\\r");
bfrout.newLine();
bfrout.flush();
bfrout.write("\\r");
bfrout.newLine();
bfrout.flush();
//process.getOutputStream().close();*/
if (prcs.waitFor() == 0)
System.out.println("Commands executed successfully");
System.exit(0);
코드에 오류가있는 것 같습니다. BufferedReader bfrd = new BufferedReader (new InputStreamReader (process.getInputStream())). "프로세스"가 "prcs"가 아니어야합니다. – Ifthikhan
@Ifthikhan 예. 'prcs'bu 여야합니다. 그건 그냥 오타입니다. BufferedWriter를 통해 'Enter'를 실행할 수 없다는 문제가 여전히 존재합니다. 그것을 들여다 주셔서 감사합니다. –