java—如何从仍在运行的进程中正确读取std

ykejflvf  于 2021-07-08  发布在  Java
关注(0)|答案(0)|浏览(171)

我有一个运行python exe的java程序。由于脚本使用stdout返回一个进度浮点值,所以我希望在打印这些状态消息时立即读取它们。
以下是我尝试的代码:

public void run()
{
    // Create new process builder
    ProcessBuilder mProcBldr = new ProcessBuilder(mArgs.toArray(new String[0]));

    // Set it to working directory of the extracted resource
    mProcBldr.directory(new File(mPyExe.getPath()));

    // Start the process
    mProcess = mProcBldr.start();
    mStdIn = new BufferedReader(new InputStreamReader(mProcess.getInputStream()), 128);
    mStdErr = new BufferedReader(new InputStreamReader(mProcess.getErrorStream()), 128);
}
public float getProgress()
{
    float progress = 0.0f;
    try
    {
        String s;
        while ((s = mStdIn.readLine()) != null)
        {
            System.out.println(s);
        }
    }
    catch(IOException e)
    {
        e.printStackTrace();
    }

    return progress;
}

在循环中调用getprogress(),直到进程退出。

python.run();
while(!python.isFinished())
{
    System.out.println(python.getProgress());
}

这是一种工作,但它是非常“缓冲”。它一直打印到30%,然后等待一秒钟,然后打印到60%。。。等一下。。。等。。。
有没有什么方法可以立即阅读打印的行,以便进度顺利更新?
致以最诚挚的问候

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题