我正在尝试使用 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/