使用命令进行初始构建的 Java ProcessBuilder 语法

标签 java syntax processbuilder

我正在尝试运行一个命令,在构建时将其作为参数提供给 ProcesBuilder。

命令如下:

wmic process where name='OUTLOOK.EXE' get CommandLine

我通常只会使用 pb.command() 运行它,但我需要“捕获”我已经通过 BufferedReader 完成的输出。

所以我的问题是,如果我想做类似的事情,我该如何正确地使用语法:

ProcessBuilder pb = new ProcessBuilder("wmic process where name='OUTLOOK.EXE' get CommandLine");

我知道我必须以某种方式将其拆分,但我不知道如何拆分。

完整方法如下:

    public static void sendmail() throws IOException {

        ProcessBuilder pb = new ProcessBuilder("wmic process where name='OUTLOOK.EXE' get CommandLine");
        final Process p=pb.start();

        BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line;
        StringBuilder sb = new StringBuilder();
        while((line=br.readLine())!=null) sb.append(line);


        System.out.println(sb.toString());

}

最佳答案

分隔命令参数应该有效。

import java.io.IOException;

public class WmicProcessRunner {
    public static void main(String[] args) {
        try {
            ProcessBuilder processBuilder = new ProcessBuilder("wmic", "process", "where", "name='OUTLOOK.EXE'", "get",
                    "CommandLine");
            processBuilder.inheritIO();
            Process wmicProcess = processBuilder.start();
            while (wmicProcess.isAlive()) {
                Thread.sleep(1000);
            }
            wmicProcess.destroy();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

关于使用命令进行初始构建的 Java ProcessBuilder 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62023629/

相关文章:

java - Hibernate自身ManyToMany保存问题

java - token "<="出现语法错误,删除此 token

java - 流程生成器找不到我的文件

java - ProcessBuilder 找不到 perl

java - 如何获取当前文件当前行的Git提交信息

java - 在maven中使用属性文件

r - lmer语法问题

java - 在 ProcessBuilder 中将对象作为参数传递?

java - Math.log 负返回可能会损害 Kt/V 计算

syntax - 在scala中解析嵌套元组的错误