gpt4 book ai didi

Java进程在运行时打印输出

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:16 25 4
gpt4 key购买 nike

我正在尝试在 Java 程序中运行 split 命令。当我在控制台中使用参数 --verbose 运行它时,它会按如下方式打印生成的 block :

creating file 'chunk00'
creating file 'chunk01'
creating file 'chunk02'

但是当我在 java 程序中运行它时,这些输出将在完成该过程后打印出来。当 split 进程运行时,我必须做什么才能获得输出?

我使用了以下代码:

ProcessBuilder pb = new ProcessBuilder("split", "-a 2", "-d", "-b 52MB","--verbose",path+"/"+db,"chunk");
pb.redirectErrorStream(true);
File workingFolder = new File("/home/hajibaba");
pb.directory(workingFolder);
Process proc = pb.start();
BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));

// read the output from the command
String s = null;
while ((s = stdInput.readLine()) != null)
{
System.out.println(s);
}
proc.waitFor();

但是,它适用于使用 echo 打印相同结果的 bash 脚本。

最佳答案

I/O 在交互式 session 中是行缓冲的,但在写入管道时是缓冲的。

要解决此问题,您可以使用 unbuffer 命令关闭缓冲。

ProcessBuilder pb = new ProcessBuilder("unbuffer", "split", "-a2", "-d", "-b52MB","--verbose",path+"/"+db,"chunk");

https://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe

关于Java进程在运行时打印输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42530345/

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