如何在命令行中显示“ pgbench”信息并阅读

时间:2019-05-06 07:39:33

标签: java

我需要在Java(Windows)中编写一个应用程序,该应用程序将使用-P参数运行pgbench命令并从控制台读取输出。

我写了.bat文件“ windowsPostgr.bat”:

  

设置“ PGUSER = postgres”设置“ PGPASSWORD = postgres” pgbench -c 1 -f   C:/work/EasySQL.sql -j 1 -t 1500 -P 1 -U postgres mydb

我的代码:

String cmd = "cmd /c C:\\windowsPostgr.bat";
Process process = Runtime.getRuntime().exec(cmd);

try {

    BufferedReader reader =
            new BufferedReader(new InputStreamReader(process.getInputStream()));

    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }

    int exitCode = process.waitFor();
    System.out.println("\nExited with error code : " + exitCode);

} catch (IOException e) {
    e.printStackTrace();
} catch (InterruptedException e) {
    e.printStackTrace();
}

结果,当在cmd中运行jar时,仅显示所得的pgbenh信息:

  

交易类型:自定义查询比例因子:1查询模式:简单   客户端数量:1线程数量:1每个事务数量   客户:1500实际处理的交易数:1500/1500   平均延迟时间:11.181毫秒延迟标准偏差:1.200毫秒tps = 89.073332   (包括建立连接)tps = 89.404427(不包括   建立连接)

因此,当通过句柄启动windowsPostgr.bat时,将显示以下形式的其他信息(由于-P参数):

  

进度:1.0 s,76.8 tps,纬度12.147 ms stddev 1.356

     

进度:2.0 s,84.1 tps,纬度11.864 ms stddev 1.034等

实际上是一个问题:从IDEA或jar运行WindowsPostgr.bat时如何显示其他信息?并且reader.readLine()会读取并显示此信息吗?

1 个答案:

答案 0 :(得分:1)

您没有从Java中读取的其他信息实际上会打印到stderr,而不是stdout,这就是为什么您不读取它的原因。

如果需要此信息,则必须使用getErrorStream()捕获过程的标准错误。

编辑:请阅读:Java Process with Input/Output Stream

使用ProcessBuilder而不是Runtime.getRuntime().exec(cmd)来启动您的过程甚至更容易,只需使用builder.redirectErrorStream(true);将错误流重定向到输出流即可。这样,您将以正确的顺序获得一切。