Java 从jar文件运行python脚本

Java 从jar文件运行python脚本,java,python,javafx,jar,Java,Python,Javafx,Jar,我一直在开发一个java应用程序,它使用python脚本运行一些3d可视化,当我从intellij运行它时,它工作正常,但一旦我创建了jar文件,它就不运行了。操作系统:MAC操作系统 如何运行脚本: processp1=Runtime.getRuntime().exec(“python3-vizalize3d.py”)假设脚本在jar文件中,您可以从资源中获取输入流,并将其用作从python解释器创建的进程的输入: // Note: the path to the script here is

我一直在开发一个java应用程序,它使用python脚本运行一些3d可视化,当我从intellij运行它时,它工作正常,但一旦我创建了jar文件,它就不运行了。操作系统:MAC操作系统

如何运行脚本:
processp1=Runtime.getRuntime().exec(“python3-vizalize3d.py”)

假设脚本在jar文件中,您可以从资源中获取输入流,并将其用作从python解释器创建的
进程的输入:

// Note: the path to the script here is relative to the current class
// and follows strict resource name rules, since this is in a jar file
InputStream script = getClass().getResourceAsStream("visualize3D.py");

// The following creates a process to run python3.
// This assumes python3 is on the system path. Provide the full
// path to the python3 interpreter (e.g. /usr/bin/python3) if it's
// not on the path.

// The - option to python3 instructs it to execute a script provided
// as standard input.

Process process = new ProcessBuilder("python3", "-")
    .start() ;
OutputStream out = process.getOutputStream();
byte[] buffer = new byte[1024];
int read = 0;
while((read = script.read(buffer)) != -1) {
    pos.write(buffer, 0, read);
}
script.close();

有关获取脚本正确路径的详细信息,请参见

问题有多个层次和解决方案: 1.我没有将.py文件放在jar构建配置中 2.放了它之后,我总是得到一个异常,它是空的,因为代码中有一个输入错误 3.在尝试了多种运行方法后,这一方法奏效了
. 重要的是检查您是否将py文件添加到构建配置中,并以正确的方式运行它,因为python无法从zip和压缩状态运行文件。

而不是
python3 visualize3D.py
do
PYTHONPATH=/path/to/your/python/project/path/to/your/解释器/python/path/to/your/python/script.py
。例如,如果您的python项目位于/home/devfofikicar/pythonproject中,而您的python解释器位于/usr/bin/PYTHONPATH,那么您可以使用
PYTHONPATH=/home/devfofikicar/pythonproject/usr/bin/python/home/devfofikicar/pythonproject/visualize3D.py
@TinNguyen我的python文件在项目中,这意味着当我在intellij中运行它时,我不需要指定任何内容路径那么我应该写什么路径呢?要么硬编码路径(就像我在示例中所做的那样)。或者动态创建一个绝对路径,然后在任何项目上运行。无论哪种方式,您都需要提供工作环境的路径(
PYTHONPATH
)、python解释器的路径(
/usr/bin/python
)以及要执行的python文件的路径。文件必须存在于系统中的某个位置。找到它们,现在就硬编码,看看是否有效。@TinNguyen好的,我会这样做,你再问一个问题,那我怎么运行它呢。我的意思是如何使用这个PYTHONPATH来运行它?试着从终端运行您的python脚本。玩玩它,你会有一种感觉。请参见图:在本例中,仅当您指定
PYTHONPATH
时,脚本才起作用。注释不用于扩展讨论;这段对话已经结束。