我正在尝试使用Process和ProcessBuilder从Java程序运行Python脚本,但是Java一直使用错误版本的Python。 (脚本需要3.6.3才能运行,而Java需要Python 2.7)
但是,当我从终端(Java外部)运行脚本时,它将运行正确的Python(3.6.3)。被Java调用后,如何更改运行哪个版本的Python?
答案 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
。