你好,正在处理一个只需要运行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 shell。
以下是我添加到环境路径的确切行: C:\ Users \用户乔\应用程序数据\本地\程序\的Python \ Python35-32
如果有人能弄清楚我哪里出错了,我真的很感激!
答案 0 :(得分:0)
您设置的$ 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);
}
}
}