Java运行时exec阻塞输出

2024-09-25 08:42:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道有人问过类似的问题,但在尝试了多种不同的配置后,我仍然没有找到我要寻找的解决方案。当我从java运行python文件时,它一次打印所有生成的行,而不是在执行时打印。在

我有一个java程序,它显示一个简单的UI,一旦用户输入所需的所有参数,我就把这些信息传递给一组工作的python脚本。因为python程序非常广泛,运行起来需要一段时间,因此有一系列更新的状态消息将打印到命令提示符。为了测试在Java中运行一个进程,我设置了两个简单的测试文件。在

我的测试java如下

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("python -u Test.py");
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line = "";
while((line = b2.readLine()) != null){
    System.out.println(line);
}

我的测试.py文件看起来像(编辑)我添加了无缓冲类,如链接示例所示,但仍然没有运气。在

^{pr2}$

当我运行java文件时,它会等待5秒钟,然后才会显示python文件中的两个打印行。但我希望它不要阻塞进程,并将python文件中到达的每一行打印出来。任何帮助都将不胜感激。在

编辑:(已解决)

我的问题是我不得不在主程序之外执行新进程。我最终得到了

public class MyRunnable implements Runnable{
    public void run(){
        Runtime rt = Runtime.getRuntime();
        Process proc = rt.exec("python Test.py");
        StreamGobbler errGobbler = new StreamGobbler(proc.getErrorStream(), "Error");
        StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "Output");
        errGobbler.start();
        outputGobbler.start()
    }

public static void main(String[] args){
   MyRunnable myRun = new MyRunnable();
   Thread myThread = new Thread(myRun);
   myThread.start();
}

Tags: 文件py程序new进程lineprocjava