有了这个,我们可以在java中执行“build in”命令。但是,如果我们要从this运行一些自定义命令,则将“pwd”更改为“device_id -l”将不起作用。 “device_id -l”应列出当前主机的所有附加设备的ID。如果在终端本身执行“device_id -l”。它工作正常。 “build in”bash命令没有问题。谢谢。
String cmd = "pwd";
Runtime run = Runtime.getRuntime();
Process pr = run.exec(cmd);
pr.waitFor();
BufferedReader buf = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line = "";
while ((line=buf.readLine())!=null)
System.out.println(line);
我们可以原谅
答案 0 :(得分:0)
您可以尝试使用ProcessBuilder。
// create process
ProcessBuilder pb = new ProcessBuilder("/bin/bash", "-c", "device_id", "-l");
// start process
Process p = pb.start();
// wait for process exit
p.waitFor();
// read process output
BufferedReader buf = new BufferedReader(newInputStreamReader(p.getInputStream()));
String line = "";
while ((line=buf.readLine())!=null)
System.out.println(line);
答案 1 :(得分:0)
您需要将命令+参数拆分为String数组。在您的情况下,如果要执行“device_id -l”,请将其拆分为如下数组:
String[] cmd = new String[] {"/full/path/to/device_id", "-l"};
Process pr = Runtime.getRuntime().exec(cmd);
并且,您可能想要使用ProcessBuilder。
String[] cmd = new String[] {"/full/path/to/device_id", "-l"};
ProcessBuilder pb = new ProcessBuilder(cmd);
Process pr = pb.start();
最后,您必须考虑到Java不在PATH中查找可执行文件(如命令shell那样),您必须提供要执行的可执行文件/脚本的完整路径(或者它必须在工作目录中;您可以使用ProcessBuilder.directory(File)设置工作目录。