源命令无法通过Java工作

时间:2015-05-03 09:07:00

标签: java python bash terminal

从最后一天开始,我一直在尝试使用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"
        };

1 个答案:

答案 0 :(得分:1)

尝试

String[] command = {
                "/bin/bash",
                "-c",
                "source activate abc_env; " + "python example.py"
        };