Java调用错误的python版本

时间:2018-08-13 00:26:56

标签: java python

我正在尝试使用Process和ProcessBuilder从Java程序运行Python脚本,但是Java一直使用错误版本的Python。 (脚本需要3.6.3才能运行,而Java需要Python 2.7)

但是,当我从终端(Java外部)运行脚本时,它将运行正确的Python(3.6.3)。被Java调用后,如何更改运行哪个版本的Python?

2 个答案:

答案 0 :(得分:2)

简短的版本是它随您的PATH环境变量而变化。

在Windows下,Technet给出了答案。向下滚动到“命令搜索顺序”部分。 This answer很好地解释了。

对于类似UNIX的操作系统,this answer非常详细。

有两个非常有用的命令来确定要调用哪个可执行文件:which(用于类UNIX)和where(用于较新的Windows)。

Java与终端之间差异的最可能原因是您的PATH有所差异。也许您的Java版本正在以修改后的PATH运行?某种启动脚本可能正在更改它。

答案 1 :(得分:1)

在命令的开头添加/usr/bin/python3.4,以强制使用所需的python版本。如果不确定python的安装位置,请尝试使用whereis python并看看您能得到什么。

private int executeScript(final List<String> command) {
    try {
        final ProcessBuilder processBuilder = new ProcessBuilder("/usr/bin/python3.4").command(command);
        processBuilder.redirectErrorStream(true);

        System.out.println("executing: " + processBuilder.command().toString());

        final Process process = processBuilder.start();
        final InputStream inputStream = process.getInputStream();
        final InputStream errorStream = process.getErrorStream();

        readStream(inputStream);
        readStream(errorStream);

        return process.waitFor();

    } catch (Exception e) {
        System.out.println(e.getMessage());
    }

    return -1;
}

然后只需传入包含您的python命令的List