【发布时间】:2017-12-28 17:15:54
【问题描述】:
我在任何地方都找不到具体说明可以在String[] cmdarray 的Process exec(String[] cmdarray) 方法中存储的内容。我找到了一些地方cmdarray 来存储数组命令或文件位置和远程服务器名称。所以我想知道我们到底可以在String[] cmdarray 中存储什么?
【问题讨论】:
标签: java runtime runtime.exec
我在任何地方都找不到具体说明可以在String[] cmdarray 的Process exec(String[] cmdarray) 方法中存储的内容。我找到了一些地方cmdarray 来存储数组命令或文件位置和远程服务器名称。所以我想知道我们到底可以在String[] cmdarray 中存储什么?
【问题讨论】:
标签: java runtime runtime.exec
数组的第一个元素是命令,例如cmd。其他都是论据。例如:
try {
Process p = Runtime.getRuntime().exec(new String[] {"cmd", "/c", "echo", "This", "is", "an", "argument"});
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String s;
while((s = reader.readLine()) != null) {
System.out.println(s);
}
} catch (IOException e) {
e.printStackTrace();
}
这里"/c"、"echo"、"This"、"is"、"an"和"argument"都是命令cmd的参数。输出是:
This is an argument
如果要运行多个命令,则必须使用双 & 表示另一个命令正在启动:
try {
Process p = Runtime.getRuntime().exec(new String[] { "cmd", "/c", "echo", "This", "is", "an", "argument",
"&&", "echo", "this", "command", "snuck", "in" });
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String s;
while ((s = reader.readLine()) != null) {
System.out.println(s);
}
} catch (IOException e) {
e.printStackTrace();
}
这里每个命令都被发送到cmd。我不是很肯定,但我相信你必须开始一个新的过程来在别处发送命令。输出是:
This is an argument
this command snuck in
阅读本文了解更多信息:https://stackoverflow.com/a/18867097/5645656
【讨论】:
根据文档:
在单独的进程中执行指定的命令和参数。
将其视为 JVM 中的命令行界面。它采用可以使用 CMD 调用的所有进程名称。例如:您可以在 Ubuntu 中将 String chromium 传递给 exec,您会注意到 chromium 已启动。
【讨论】: