我知道有人问过类似的问题,但在尝试了多种不同的配置后,我仍然没有找到我要寻找的解决方案。当我从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();
}
目前没有回答
相关问题 更多 >
编程相关推荐