我正在尝试使用Process和ProcessBuilder从Java程序中运行Python脚本,但是Java总是使用错误的Python版本。(脚本需要3.6.3才能运行,Java运行Python 2.7)
但是,当我从终端(Java之外)运行该脚本时,它运行正确的Python (3.6.3)。当Java调用Python时,如何更改运行哪个版本的Python?
发布于 2018-08-13 08:37:22
简而言之,它随您的PATH
环境变量而变化。
在Windows下,Technet可以回答这个问题。向下滚动到“命令搜索序列”部分。This answer很好地解释了这一点。
对于类UNIX操作系统,this answer是非常详细的。
有两个非常有用的命令来决定调用哪个可执行文件:which
用于UNIX-like和where
用于较新的Windows。
Java和终端之间的差异最有可能的原因是您的PATH
不同。也许您的Java版本正在使用修改后的PATH
运行?某种启动脚本可能会改变它。
发布于 2018-08-13 08:37:34
将/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
。
https://stackoverflow.com/questions/51813909
复制相似问题