如何按顺序运行多个Windows系统命令(使用Java),第二个依赖于第一个的结果?
像这样:
adb.exe -s emulator-5554 shell
ls
并获取列表结果。
这是我的源代码,但它不起作用:
public void connectToDevice(String device) {
List<String> cmd = new ArrayList<String>();
cmd.add("adb.exe -s " + device + " shell");
cmd.add("ls");
try {
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.redirectErrorStream(true);
Process process = pb.start();
} catch (IOException e) {
System.err.println(e.getMessage());
}
}
答案 0 :(得分:1)
ProcessBuilder(List<String>)
构造函数不打算并行运行多个命令。它将第一个元素列表作为命令,后续元素作为其参数,因此实际执行的是adb.exe -s emulator-5554 shell ls
作为一个命令。将其分为两个过程:
ProcessBuilder pb1 = new ProcessBuilder("adb.exe -s " + device + " shell");
pb1.redirectErrorStream(true);
Process p1 = pb1.start();
p1.waitFor();
ProcessBuilder pb2 = new ProcessBuilder("ls");
pb2.redirectErrorStream(true);
Process p2 = pb2.start();
p2.waitFor();