ProcessBuilder 在 Linux 但不在 Windows 中工作
ProcessBuilder working in Linux but not Windows
我有一个使用 ProcessBuilder
运行 echo
命令的简单程序,该程序在我的 Linux 机器上运行良好,但它抛出 IOException
当 运行 在 Windows.
这是我的程序的简化版本。它将 echo
和 hello
作为 ProcessBuilder
的参数,然后将输出保存到字符串中并打印输出。在 Linux 中,输出是 hello
,在 Windows 中捕获了 IOException
。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class TestPB {
public static void main(String[] args) throws InterruptedException {
ProcessBuilder pb = new ProcessBuilder("echo", "hello");
try {
Process process = pb.start();
BufferedReader readProcessOutput = new BufferedReader(new InputStreamReader(process.getInputStream()));
String output = "";
String line = "";
while ( (line = readProcessOutput.readLine()) != null) {
output += line;
output += System.getProperty("line.separator");
}
process.waitFor();
if(output.length() > 0) {
System.out.println(output.substring(0, output.length() -1));
} else {
System.out.println("No result");
}
} catch (IOException io) {
System.out.println("IOException thrown");
}
}
}
有谁知道为什么这在 Windows 中不起作用?
echo
不是 Windows 上的程序,它是内部 shell 命令 *,因此您需要调用 command-line 口译员:
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "echo", "hello");
*)参考:Wikipedia
我有一个使用 ProcessBuilder
运行 echo
命令的简单程序,该程序在我的 Linux 机器上运行良好,但它抛出 IOException
当 运行 在 Windows.
这是我的程序的简化版本。它将 echo
和 hello
作为 ProcessBuilder
的参数,然后将输出保存到字符串中并打印输出。在 Linux 中,输出是 hello
,在 Windows 中捕获了 IOException
。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class TestPB {
public static void main(String[] args) throws InterruptedException {
ProcessBuilder pb = new ProcessBuilder("echo", "hello");
try {
Process process = pb.start();
BufferedReader readProcessOutput = new BufferedReader(new InputStreamReader(process.getInputStream()));
String output = "";
String line = "";
while ( (line = readProcessOutput.readLine()) != null) {
output += line;
output += System.getProperty("line.separator");
}
process.waitFor();
if(output.length() > 0) {
System.out.println(output.substring(0, output.length() -1));
} else {
System.out.println("No result");
}
} catch (IOException io) {
System.out.println("IOException thrown");
}
}
}
有谁知道为什么这在 Windows 中不起作用?
echo
不是 Windows 上的程序,它是内部 shell 命令 *,因此您需要调用 command-line 口译员:
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "echo", "hello");
*)参考:Wikipedia