【发布时间】:2012-08-07 06:31:40
【问题描述】:
-
在 Java 中,如何执行带有选项的 linux 程序,如下所示:
ls -a(选项是-a),另一个:
./myscript name=john age=24我知道如何执行命令,但无法执行该选项。
【问题讨论】:
-
那么你使用哪个API来执行命令?
-
有很多选择... :-/
在 Java 中,如何执行带有选项的 linux 程序,如下所示:
ls -a(选项是-a),
另一个:./myscript name=john age=24
我知道如何执行命令,但无法执行该选项。
【问题讨论】:
你需要执行一个外部进程,看看ProcessBuilder,因为它几乎回答了你的问题,Using ProcessBuilder to Make System Calls
更新示例
我直接从列表示例中提取并对其进行了修改,以便我可以在我的 PC 上进行测试,它运行良好
private static void copy(InputStream in, OutputStream out) throws IOException {
while (true) {
int c = in.read();
if (c == -1) {
break;
}
out.write((char) c);
}
}
public static void main(String[] args) throws IOException, InterruptedException {
// if (args.length == 0) {
// System.out.println("You must supply at least one argument.");
// return;
// }
args = new String[] {"cmd", "/c", "dir", "C:\\"};
ProcessBuilder processBuilder = new ProcessBuilder(args);
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
copy(process.getInputStream(), System.out);
process.waitFor();
System.out.println("Exit Status : " + process.exitValue());
}
【讨论】:
ProcessBuilder pb = new ProcessBuilder(.......)如何在dot dot dot里面设置command和args?
ProcessBuilder 接受 List<String> 或 String 参数数组,第一个是要执行的命令,其余的在命令参数中(每个参数都应该是一个单独的参数)
Apache Commons 有一个库来处理这类事情。我希望在我手动编写这样的代码之前知道它。后来我找到了。它为命令行程序提供各种格式的选项。
【讨论】: