Mac OSX上的Java ProcessBuilder没有看到Python 3

时间:2017-08-31 21:23:13

标签: java python macos python-3.x processbuilder

我尝试使用ProcessBuilder从Java运行Python脚本。该脚本至少需要Python 3。我这样称呼它:

// the -u is for unbuffered output
String[] pythonCommand = {"python", "-u", "script.py"};
ProcessBuilder ps = new ProcessBuilder(pythonCommand);
Process pr = pb.start();

它在Windows上完全正常,当我定义script.py打印出带有sys.version_info的Python版本时,它告诉我我正在运行Python 3.6.2

但是,在我朋友的Macbook上,脚本不起作用,sys.version_info显示Python 2.7.1。她使用带有brew install python3的自制软件安装了Python 3。当她从终端运行python3 scriptname.py时,它在Python 3.6.2上运行,但python scriptname.py在终端上运行在Python 2.7.1上。

因此,我认为我可以将Java ProcessBuilder命令更改为

String[] pythonCommand = {"python3", "-u", "script.py"}; // python3

如果操作系统名称不是从Windows开始,但该命令在Mac OS上不能使用Java的流程构建器 - 它会抛出

java.io.IOException: Cannot run program "python3": error=2, No such file or directory

我认为这是ProcessBuilder用于运行Python的路径的问题,这听起来不错吗?也许我需要尝试使用virtualenv在Mac上运行Python 3,但我不知道该怎么做。或者,它可能是完全不同的东西吗?

2 个答案:

答案 0 :(得分:0)

Homebrew并不总是将实际的python3可执行文件链接到PATH中的目录。您应该通过终端进行检查。

在我的MacBook上,python3链接在/usr/local/bin/python3

xvolks@localhost ~> ls -l /usr/local/bin/python3
lrwxr-xr-x  1 xvolks  admin  35 19 aoû 00:02 /usr/local/bin/python3 -> ../Cellar/python3/3.6.2/bin/python3

如果缺少链接,您可以使用命令brew link python3 创造它。

答案 1 :(得分:0)

由于它依赖于Python并且在用户的计算机上安装了所有必需的模块,所以我最终完全不再采用这种方法。相反,我使用Pyinstaller将Python脚本打包成可执行文件,将它们放入Java资源文件夹,并从Java ProcessBuilder调用已编译的可执行文件。