BufferedReader将打印整个输出

2024-10-02 06:21:45 发布

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

我试图用Java打印python文件的输出。你知道吗

python文件基本上是一个web scraper—其中有多个函数,每个函数都包含一些输出行。所以输出应该是一个接一个的顺序。每一行输出必须以一个固定的间隔(根据代码)出现,而不是全部。 下面的代码打印输出,但是我只在整个程序运行之后才将输出作为单个文本。你知道吗

public class Samtest extends Thread {

public static void main(String[] args) {

  String pythonScriptPath0 = "IR_Component_module11.py";
  String[] cmd0 = new String[2];
  cmd0[0] = "C:\\Python27\\python.exe";
  cmd0[1] = pythonScriptPath0;
  Runtime rt0 = Runtime.getRuntime();
  java.lang.Process pr0 = rt0.exec(cmd0);
  BufferedReader bfr0 = new BufferedReader(new InputStreamReader(pr0.getInputStream()));
  String line0 = "";
  while((line0 = bfr0.readLine()) != null)
  {
    System.out.println(line0);
  }

 }
}

我需要输出来按照程序运行自然。但我在程序结束后得到了所有的输出快跑。那个scraper由一个GUI组成。因此,只有当我退出GUI时,我才能得到输出。你知道吗


Tags: 文件函数代码程序运行newstringpublicscraper
2条回答

您正在接收的输出是由python脚本创建/生成的,然后这个输出被传递到您的java程序,该程序最终打印输出。如果python脚本尚未完成执行,则无法接收其输出。因此,java程序等待python脚本完成执行,然后从python脚本检索输出并最终打印它。这就是为什么在关闭GUI时获得输出的原因。你知道吗

用一个简单的python脚本试试看。创建包含以下内容的python脚本:

import time
print 'Hello'
time.sleep(2)
print 'TimeUp'

如果您使用python执行这个脚本,那么您可能会看到它首先打印Hello,然后在2秒之后打印TimeUp。但是当您使用java程序执行相同的脚本时。你将看到整个输出。因为java程序将等待python脚本完成。我希望你现在明白原因了。使用线程并不能解决这个问题。你知道吗

本例中的执行顺序是:python脚本->;Java程序->;控制台输出

execution

Here是一个有趣的问题,可能会帮助你进一步。你知道吗

编辑

Python缓冲输出。使用-u

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Samtest extends Thread {

    public static void main(String[] args) throws IOException {

        String pythonScriptPath0 = "IR_Component_module11.py";
        String[] cmd0 = new String[3];
        cmd0[0] = "C:\\Python27\\python.exe";
        cmd0[1] = "-u";
        cmd0[2] = pythonScriptPath0;
        Runtime rt0 = Runtime.getRuntime();
        java.lang.Process pr0 = rt0.exec(cmd0);
        BufferedReader bfr0 = new BufferedReader(new InputStreamReader(pr0.getInputStream()));
        String line0 = "";
        while ((line0 = bfr0.readLine()) != null) {
            System.out.println(line0);
        }

    }
}

相关问题 更多 >

    热门问题