如何使用 Java 运行时从 Python 脚本打印标准输出?
How can I print the std output from Python script using Java runtime?
我想使用 Java 运行时打印以下 Python 脚本的标准输出。我的理想结果会简单地打印出 "Hello World"。为什么我得到 java.io.IOException: Cannot run program "python": CreateProcess error=2, The system cannot find the file specified at java.lang.ProcessBuilder.start
?我的路径和 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);
}
执行此操作的一种方法是将 python 输出更改为输出到文件。我相信您可以通过将进程字符串更改为:
来稍微做到这一点
String commandline = "python /c start python C:\Users\Name\HelloWorld.py > output.txt"
然后使用 java 必须打开/读取文件的百万种方式中的任何一种来处理文件,其中应该包含 python 程序的输出。您可能想要添加一个 thread.sleep(1000),因为您的 python 脚本不会在 JVM 中 运行 并且可能需要时间来完成,因为 [=16= 中的说明] 程序是同步的。
我想使用 Java 运行时打印以下 Python 脚本的标准输出。我的理想结果会简单地打印出 "Hello World"。为什么我得到 java.io.IOException: Cannot run program "python": CreateProcess error=2, The system cannot find the file specified at java.lang.ProcessBuilder.start
?我的路径和 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);
}
执行此操作的一种方法是将 python 输出更改为输出到文件。我相信您可以通过将进程字符串更改为:
来稍微做到这一点String commandline = "python /c start python C:\Users\Name\HelloWorld.py > output.txt"
然后使用 java 必须打开/读取文件的百万种方式中的任何一种来处理文件,其中应该包含 python 程序的输出。您可能想要添加一个 thread.sleep(1000),因为您的 python 脚本不会在 JVM 中 运行 并且可能需要时间来完成,因为 [=16= 中的说明] 程序是同步的。