从最后一天开始,我一直在尝试使用JAVA在终端(MAC)上执行命令,但无论我什么都不做就行了。
我有以下2个命令要执行并在JAVA中获取输出
source activate abc_env
python example.py
到目前为止,我已经尝试了以下方法,没有任何输出
String[] command = new String[] { "source activate abc_env", "python example.py"};
String result = executeCommands(command);
这是我的executeCommands方法
private static String executeCommands(String[] command) {
StringBuffer output = new StringBuffer();
Process p;
try {
for(int i=0; i< command.length;i++)
{
p = Runtime.getRuntime().exec(command[i]);
p.waitFor();
BufferedReader reader =
new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = reader.readLine())!= null) {
output.append(line + "\n");
}
System.out.println("Error output: " + p.exitValue());
System.out.println("Output:" + output);
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("Here");
}
return output.toString();
}
这给了我以下异常
无法运行程序“source”:error = 2,没有这样的文件或目录
我在线搜索,人们说源不会像这样工作,我应该将命令更改为
String[] command = new String[] { "bash -c 'source activate abc_env'", "python example.py"};
现在,我没有得到异常,但命令仍然不起作用,它返回'2'为 exitValue()
然后我尝试将命令作为脚本执行
#!/bin/bash
source activate abc_env
python example.py
当我将.sh文件作为字符串读取并将其传递给命令
时,我收到以下异常无法运行程序“#!/ bin / bash”:error = 2,没有这样的文件或目录
所以,我的问题是如何通过Java正确运行source命令后跟python命令?我的最终目标是从Java执行一些python。
EDIT1: 如果我尝试以下命令并打印输出流
String[] command = {
"/bin/bash",
"-c",
"source activate cvxpy_env"
};
executeCommand(command));
输出流:
ExitValue:1
ErrorOutput:/ bin / bash:activate:没有这样的文件或目录
如果我尝试相同的命令,但在'source activate abc_env'周围使用单引号。我得到以下输出
ExitValue:127
ErrorOutput:/ bin / bash:source activate cvxpy_env:找不到命令
解决方案:
String[] command = {
"/bin/bash",
"-c",
"source /Users/pc_name/my_python_library/bin/activate abc_env;python example.py"
};
答案 0 :(得分:1)
尝试
String[] command = {
"/bin/bash",
"-c",
"source activate abc_env; " + "python example.py"
};