【问题标题】:Basic Java Runtime program cannot find python基本 Java 运行时程序找不到 python
【发布时间】:2017-03-07 01:37:36
【问题描述】:

您好,正在开发一个只需要运行我拥有的 python 脚本的小程序。这个 python 脚本将播放给定的 .wav 文件,并在海龟屏幕上绘制一个形状。因此,我不是在寻找要返回给 java 的输出。这是我的java代码:

public class Driver {

public static void main(String[] args){
    try {
        Process p = Runtime.getRuntime().exec("python " + 
" D:/Coding Files/Python/MusicColors.py" +"  teenagers.wav");
    }
    catch (Exception e){
        System.out.println(e);
    }
}
}

我得到的例外是:

java.io.IOException: Cannot run program "python": 
CreateProcess error=2, The system cannot find the file specified

我可能犯了一个非常愚蠢的错误,因为我在流程等方面的知识有限。我将python添加到我的系统路径中,所以每当我将“python”放入命令行时,它都会返回

Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC v.1900 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information.

并使其成为 python 外壳。

这是我添加到环境路径中的确切行: C:\Users\Joe\AppData\Local\Programs\Python\Python35-32

如果有人能弄清楚我哪里出错了,我将不胜感激!

【问题讨论】:

  • 这听起来可能很愚蠢:您是否尝试过重新启动计算机?根据我的经验,路径变量可能有点棘手。

标签: java python cmd path runtime


【解决方案1】:

您设置的 $PATH 变量不会在 Java 的执行上下文中继承。尝试将 Python 的 bin 路径传递给 exec() 的执行环境。

为此,下面的代码首先检索所有环境变量并创建一个 ENV_KEY=ENV_VALUE 对数组。

然后,将 Python 的 bin 的路径附加到 PATH 值。

最后,我们将所有环境变量的数组传递给exec()(通过第二个参数)。

import java.util.HashMap;
import java.util.Map;

public class Driver {
    public static void main(String[] args){
        try {
            String[] commands = {"python D:/Coding Files/Python/MusicColors.py teenagers.wav"}; 

            // Get a list of all environment variables
            final Map<String, String> envMap = new HashMap<String, String>(System.getenv());

            // Append Python bin path to Path
            envMap.put("Path", envMap.get("Path") + ";C:/Users/Joe/AppData/Local/Programs/Python/Python35-32");

            // Convert to an array of ENV_KEY=ENV_VALUE format strings
            final String[] envs = new String[envMap.size()];
            int i = 0;
            for (Map.Entry<String, String> e : envMap.entrySet()) {
                envs[i] = e.getKey() + '=' + e.getValue();
                i++;
            }

            // Exec with the environment variables
            Process p = Runtime.getRuntime().exec(commands, envs); 
        }
        catch (Exception e){
            System.out.println(e);
        }
    }
}

【讨论】:

  • 你能检查一下python的安装位置吗?如果在 Windows 上,请在命令行中输入 where python 以查看是否获得 C:/Users/Joe/AppData/Local/Programs/Python/Python35-32/python.exe。
  • 是的,'python' 返回 C:\Users\Joe\AppData\Local\Programs\Python\Python35-32\python.exe
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 2013-02-22
  • 2020-10-10
相关资源
最近更新 更多