selenium—用java中的多个参数执行命令行操作的稳定方法是什么?

cpjpxq1n  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(336)

我读过几个关于如何从java执行外部程序的问题,例如:
使用带有多个参数的runtime.getruntime().exec
如何使用参数执行命令?
java:运行cmd命令(同时具有多个参数的多个命令)
可能还有几个,但建议的解决方案都不适合我。
代码:

public static void freezeAllChromeInstances() throws IOException, InterruptedException {

    String[] freezeAllChromeInstances = {"/usr/bin/killall", "-STOP "
            + "\'Google Chrome\'"
            + "chromedriver-mod"
            + "\'Google Chrome Helper (Renderer)\'"
            + "\'Google Chrome Helper\'"
            + "\'Google Chrome Helper (GPU)\'"};
    Runtime run = Runtime.getRuntime();
    Process pr = run.exec(freezeAllChromeInstances);
    Thread.sleep(1000);
    pr.waitFor();
    BufferedReader buf = new BufferedReader(new InputStreamReader(pr.getInputStream()));
    String line = "";
    while ((line=buf.readLine())!=null) {
        System.out.println(line);
    }
}

很容易理解:我想暂停一切。跑步 /usr/bin/killall -STOP 'Google Chrome' chromedriver-mod 'Google Chrome Helper (Renderer)' 'Google Chrome Helper' 'Google Chrome Helper (GPU)' 从命令行运行,但我上面的代码没有任何效果。
我试过使用一个字符串,一个字符串数组,不管是否转义撇号,组合 kill 以及 -STOP 一根绳子,以此类推。
你该怎么做?最好有一个最终的,对所有人都有效的解决方案。
更新:忘了提-我也试过了

ProcessBuilder pb = new ProcessBuilder("/usr/bin/killall", "-STOP "
            + "\'Google Chrome\'"
            + "chromedriver-mod"
            + "\'Google Chrome Helper (Renderer)\'"
            + "\'Google Chrome Helper\'"
            + "\'Google Chrome Helper (GPU)\'");
    Process p = pb.start();
xeufq47z

xeufq47z1#

通过使用“+”而不是“,”将chrome进程名连接到一个没有空格的进程名。更改这个对我来说很有用(我添加了最后一个,因为这是我的ubuntu中进程的名称):

String[] freezeAllChromeInstances = {"/usr/bin/killall", "-STOP", 
                                     "\'Google Chrome\'", 
                                     "\'chromedriver-mod\'",
                                     "\'Google Chrome Helper (Renderer)\'",
                                     "\'Google Chrome Helper\'",
                                     "\'Google Chrome Helper (GPU)\'",                           
                                     "/opt/google/chrome/chrome"};
Runtime run = Runtime.getRuntime();
Process pr = run.exec(freezeAllChromeInstances);
pr.waitFor();

processbuilder版本也是如此-您还需要在那里创建一个字符串[]:

ProcessBuilder pb = new ProcessBuilder(new String[]{"/usr/bin/killall", "-STOP", 
                                       "\'Google Chrome\'", 
                                       "\'chromedriver-mod\'",
                                       "\'Google Chrome Helper (Renderer)\'",
                                       "\'Google Chrome Helper\'",
                                       "\'Google Chrome Helper (GPU)\'",                           
                                       "/opt/google/chrome/chrome"});
Process p = pb.start();

另外,我认为,如果您等待进程终止,就没有必要再睡一秒钟。它还可以帮助打印 getErrorStream() 输出也一样。

相关问题