如何使用Java运行时从Python脚本打印std输出?

时间:2016-05-24 14:33:39

标签: java python jsp runtime ioexception

我想使用Java Runtime打印以下Python脚本的std输出。我理想的结果就是打印出#Hello; Hello World"。我为什么要java.io.IOException: Cannot run program "python": CreateProcess error=2, The system cannot find the file specified at java.lang.ProcessBuilder.start?我的Path和Python环境变量已正确配置。

String commandline = "python /c start python C:\\Users\\Name\\HelloWorld.py"

try {
                //TODO java.io.IOException: Cannot run program "dir"
                Process process = Runtime.getRuntime().exec(commandline);
                process.waitFor();

                // Store command line output
                BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); 

                StringBuilder builder = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    builder.append(line);
                    builder.append(System.getProperty("line.separator"));
                }
                String result = builder.toString();

                if (result != null) {
                    PrintWriter out = resp.getWriter();
                    out.println("<div>" + result + "</div>");
                    System.exit(0);
                } else {
                    PrintWriter out = null;
                }

            } catch (IOException e1) {
                PrintWriter out = resp.getWriter();
                e1.printStackTrace(out);
            } catch (InterruptedException e2) {
                PrintWriter out = resp.getWriter();
                e2.printStackTrace(out);
            }

1 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是将python输出更改为输出到文件。我相信你可以通过将进程字符串更改为:

来做到这一点
String commandline = "python /c start python C:\\Users\\Name\\HelloWorld.py > output.txt"

然后使用java打开/读取文件来处理文件的百万种方式中的任何一种,该文件应该包含python程序的输出。您可能想要添加thread.sleep(1000),因为您的python脚本无法在JVM中运行,并且可能需要时间来完成,因为您的Java程序中的指令是同步的。