Mac OSX 上的 Java ProcessBuilder 看不到 Python 3

标签 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

但是,在我 friend 的 Macbook 上,该脚本不起作用,并且 sys.version_info 显示 Python 2.7.1。她使用 homebrew 通过 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,但我不知道该怎么做。或者,它可能是完全不同的东西吗?

最佳答案

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 创建它。

关于Mac OSX 上的 Java ProcessBuilder 看不到 Python 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45990276/

相关文章:

Java: child 可以杀死 parent 吗?

java - 实例化类型参数的对象

python - 我可以在哪个 py.test 标注中找到 'item' 和 'report' 数据?

python - 将 matplotlib 图放入 wxpython

node.js - 安装 MAC OS X El Capitan 后出错

java - 如何配置 POJO 使其将整数值索引为文本而不是整数?

java - 为什么这个方法调用不起作用?

python - 在列表的同一行上格式化 python 中的 float

swift - 从屏幕上的像素准确获取颜色并转换其颜色空间

ios - 如何使用和调试不存在模拟器的 iOS 版本?