Java Mac OSX 上的 ProcessBuilder 没有看到 Python 3
Java ProcessBuilder on Mac OSX doesn't see Python 3
我正在尝试使用 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
但是,在我朋友的 Mac 书中,脚本不起作用并且 sys.version_info
显示 Python 2.7.1。她使用带有 brew install python3
的自制软件安装了 Python 3。当她从终端 运行s python3 scriptname.py
时,它 运行s 在 Python 3.6.2 但 python scriptname.py
运行s 在 Python 2.7.1 来自终端。
因此,我认为我可以将 Java ProcessBuilder 命令更改为
String[] pythonCommand = {"python3", "-u", "script.py"}; // python3
如果 OS 名称不是以 Windows 开头,但该命令在 Mac OS 上的 Java 的 processbuilder 中不起作用]——抛出
java.io.IOException: Cannot run program "python3": error=2, No such file or directory
我认为这是 ProcessBuilder 用于 运行 Python 的路径问题,听起来对吗?也许我需要尝试使用 virtualenv 到 运行 Python 3 on Mac,但我不知道该怎么做。或者,它会是完全不同的东西吗?
Homebrew 并不总是 link 实际 python3 可执行文件到 PATH
中的目录。你应该用终端检查一下。
在我的 MacBook 上,python3 在 /usr/local/bin/python3
处 link 编辑
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
如果缺少 link 可以使用命令 brew link python3
创建它。
我最终完全放弃了这种方法,因为它依赖于 Python 并且所有必需的模块都安装在用户的计算机上。相反,我使用 Pyinstaller 将我的 Python 脚本打包成可执行文件,将它们放入 Java 资源文件夹,并从 Java 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
但是,在我朋友的 Mac 书中,脚本不起作用并且 sys.version_info
显示 Python 2.7.1。她使用带有 brew install python3
的自制软件安装了 Python 3。当她从终端 运行s python3 scriptname.py
时,它 运行s 在 Python 3.6.2 但 python scriptname.py
运行s 在 Python 2.7.1 来自终端。
因此,我认为我可以将 Java ProcessBuilder 命令更改为
String[] pythonCommand = {"python3", "-u", "script.py"}; // python3
如果 OS 名称不是以 Windows 开头,但该命令在 Mac OS 上的 Java 的 processbuilder 中不起作用]——抛出
java.io.IOException: Cannot run program "python3": error=2, No such file or directory
我认为这是 ProcessBuilder 用于 运行 Python 的路径问题,听起来对吗?也许我需要尝试使用 virtualenv 到 运行 Python 3 on Mac,但我不知道该怎么做。或者,它会是完全不同的东西吗?
Homebrew 并不总是 link 实际 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
如果缺少 link 可以使用命令 brew link python3
创建它。
我最终完全放弃了这种方法,因为它依赖于 Python 并且所有必需的模块都安装在用户的计算机上。相反,我使用 Pyinstaller 将我的 Python 脚本打包成可执行文件,将它们放入 Java 资源文件夹,并从 Java ProcessBuilder 调用编译后的可执行文件。