【发布时间】:2017-08-20 11:16:12
【问题描述】:
我读过这个问题: Java Programming: call an exe from Java and passing parameters
这个答案已经足够好了 https://stackoverflow.com/a/5604756/2674303
但我还想将参数传递给外部进程的标准输入并从该进程的标准输出中读取。
我该怎么做?
我的努力:
主要方法:
public class ProcessBuilderTest {
public static void main(String[] args) throws IOException, InterruptedException {
ProcessBuilder pb = new ProcessBuilder("C:\\Program Files\\Java\\jdk1.8.0_111\\bin\\java",
"-cp", //class path key
"C:\\Users\\redwhite\\IdeaProjects\\HelloMyWorld\\out\\production\\HelloMyWorld" , // path to class file of ExternalProcess class
"call_external.ExternalProcess"); // fully qualified name
Process process = pb.start();
OutputStream processOutputStream = process.getOutputStream();
IOUtils.write("1" + System.lineSeparator(), processOutputStream);
InputStream processInputStream = process.getInputStream();
System.out.println("--1--");
System.out.println(process.isAlive()); // outputs true
String result = IOUtils.toString(processInputStream, "UTF-8"); //<-- hangs here
System.out.println("--2--");
process.waitFor();
System.out.println(result); // expect to see processed[1]
}
}
ExternalProcess 等待 stdin 中的字符串 并生成另一个字符串到 stdout:
package call_external;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Created by redwhite on 27.03.2017.
*/
public class ExternalProcess {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
System.out.println("processed[" + input + "]");
}
}
这段代码挂了。我不明白为什么
【问题讨论】:
-
@Reimeus 也许......我不知道如何检查它。对于这种情况,我将 System.lineSeparator() 添加到输入的末尾
-
您的代码不清晰。 2个代码sn-ps有什么关系?发布minimal reproducible example
-
@Reimeus 它真的是最小的,完整的等等。在代码的第一部分我调用外部进程。第二个代码sn -p中提供的这个过程的代码
-
@Reimeus new ProcessBuilder("C:\\Program Files\\Java\\jdk1.8.0_111\\bin\\java", "-cp", "project_folder\\target \\classes package.ExternalProcess");
标签: java exe stdout stdin processbuilder