从 Java 调用 Python 代码的问题(不使用 jython)

Jav*_*uth 5 python java jython python-3.x

我发现这是从 java 运行(使用 exec() 方法)python 脚本的方法之一。我在 python 文件中有一个简单的打印语句。但是,我的程序在运行时什么也没做。它既不打印用 python 文件编写的语句也不抛出异常。该程序只是终止什么都不做:

Process p = Runtime.getRuntime().exec("C:\\Python\\Python36-32\\python.exe C:\\test2.py");
Run Code Online (Sandbox Code Playgroud)

即使这不是创建输出文件:

Process p = Runtime.getRuntime().exec("C:\\Python\\Python36-32\\python.exe C:\\test2.py output.txt 2>&1");
Run Code Online (Sandbox Code Playgroud)

问题是什么?

Pat*_*ick 2

我想你可以用 ProcessBuilder 类试试你的运气。

如果我正确地阅读了 Oracle 文档,则默认情况下 std 输入和输出将定向到管道,ProcessBuilder 有一个简单的方法可让您将输出(或输入)显式设置为系统上的文件或其他文件

如果您希望 Python 程序使用与 Java 程序相同的输出(可能是 stdout 和 stderr),您可以像这样使用 stg:

ProcessBuilder pb = new ProcessBuilder("C:\\Python\\Python36-32\\python.exe", "C:\\test2.py");
pb.redirectOutput(Redirect.INHERIT);
Process p = pb.start();
Run Code Online (Sandbox Code Playgroud)

  • 这个怎么样:/sf/answers/2845421561/?这能解决你的问题吗? (2认同)
  • 这就像一个魅力 - ```ProcessBuilder pb = new ProcessBuilder("C:\\Python\\Python36-32\\python.exe", "C:\\test2.py");```。更进一步,如何将参数传递给 python 并获取返回数据? (2认同)
  • 您可以像在终端上一样传递参数,方法是将它们添加到代码中的命令行中: `... new ProcessBuilder("C:\Python\\Python36-32\\python.exe", "C:\ \test2.py", "arg0", "arg1");` 或者您想在 Java 程序和 Python 程序之间进行某种交互吗?在这种情况下,您可以让 Java 程序向 python 进程的输入流写入一些内容。至于返回数据我不知道你在做什么。你可以做的一件事是让 Java 读取你的 python 程序在 stdout 上的输出,但这对我来说似乎很烦人。 (2认同)