我想从另一个Java程序中执行Java CLI程序并获取CLI程序的输出。我尝试了两种不同的实现(使用runtime.exec()和ProcessBuilder)并且它们不起作用。
这是奇特的部分; 实现工作(捕获输出)以执行pwd之类的命令但由于某种原因它们没有捕获用java Hello执行的Hello World java程序的输出。
执行代码:
public static void executeCommand(String command)
{
System.out.println("Command: \"" + command + "\"");
Runtime runtime = Runtime.getRuntime();
try
{
Process process = runtime.exec(command);
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(process.getInputStream()));
BufferedReader stdError = new BufferedReader(new
InputStreamReader(process.getErrorStream()));
// read the output from the command
System.out.println("Standard output of the command:\n");
String s = null;
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}
// read any errors from the attempted command
System.out.println("Standard error of the command (if any):\n");
while ((s = stdError.readLine()) != null) {
System.out.println(s);
}
} catch (Exception e)
{
e.printStackTrace();
}
}
示例输出
Command: "cd /Users/axelkennedal/Desktop && java Hello"
Standard output of the command:
Standard error of the command (if any):
Command: "pwd"
Standard output of the command:
/Users/axelkennedal/Dropbox/Programmering/Java/JavaFX/Kode
Standard error of the command (if any):
我已经确认Hello确实在从CLI直接运行Hello而不是executeCommand()时向CLI打印“Hello world”。
Hello world
public class Hello
{
public static void main(String[] args)
{
System.out.println("Hello world!");
}
}