我试图用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时,我才能得到输出。你知道吗
您正在接收的输出是由python脚本创建/生成的,然后这个输出被传递到您的java程序,该程序最终打印输出。如果python脚本尚未完成执行,则无法接收其输出。因此,java程序等待python脚本完成执行,然后从python脚本检索输出并最终打印它。这就是为什么在关闭GUI时获得输出的原因。你知道吗
用一个简单的python脚本试试看。创建包含以下内容的python脚本:
如果您使用python执行这个脚本,那么您可能会看到它首先打印
Hello
,然后在2
秒之后打印TimeUp
。但是当您使用java程序执行相同的脚本时。你将看到整个输出。因为java程序将等待python脚本完成。我希望你现在明白原因了。使用线程并不能解决这个问题。你知道吗本例中的执行顺序是:python脚本->;Java程序->;控制台输出
Here是一个有趣的问题,可能会帮助你进一步。你知道吗
编辑
Python缓冲输出。使用
-u
相关问题 更多 >
编程相关推荐