gpt4 book ai didi

java - 如何在命令行中显示 "pgbench"信息并读取

转载 作者:行者123 更新时间:2023-12-02 09:56:06 25 4
gpt4 key购买 nike

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

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

set "PGUSER=postgres" set "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信息:

transaction type: Custom query scaling factor: 1 query mode: simple number of clients: 1 number of threads: 1 number of transactions per client: 1500 number of transactions actually processed: 1500/1500 latency average: 11.181 ms latency stddev: 1.200 ms tps = 89.073332 (including connections establishing) tps = 89.404427 (excluding connections establishing)

然而,当 windowsPostgr.bat 通过句柄启动时,会显示以下形式的附加信息(由于 -P 参数):

progress: 1.0 s, 76.8 tps, lat 12.147 ms stddev 1.356

progress: 2.0 s, 84.1 tps, lat 11.864 ms stddev 1.034 etc

实际上的问题是:从IDEA或jar运行windowsPostgr.bat时如何显示附加信息? reader.readLine()会读取并显示这些信息吗?

最佳答案

您没有从 java 读取的附加信息实际上会打印到 stderr,而不是 stdout,这就是您不读取它的原因。

如果您需要此信息,您必须使用 getErrorStream() 捕获进程的 stderr。

编辑:阅读此内容:Java Process with Input/Output Stream

使用 ProcessBuilder 而不是 Runtime.getRuntime().exec(cmd) 来启动进程甚至更容易,然后使用以下命令将错误流重定向到输出流builder.redirectErrorStream(true);。这样您就可以按照正确的顺序获得所有内容。

关于java - 如何在命令行中显示 "pgbench"信息并读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56000771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com