将shell脚本的输出放入Java程序中的变量中

时间:2014-02-24 22:17:52

标签: java shell output

有没有办法将shell脚本程序的输出转换为Java程序中的变量(而不是输出文件)。我的shell脚本的输出是数据库查询执行时间,我需要将该时间值分配给Java变量。 (我从Java程序调用那个shell脚本)。然后我将需要对Java中的这些值进行一些其他计算。

3 个答案:

答案 0 :(得分:1)

更新为旧问题

自Java 7以来,有一个新类可以轻松处理操作系统过程:apparently challenging to do even in the full Laravel framework 。假设我们需要将ip_conf.bat的输出存储到Java String中。 c:\tmp\ip_conf.bat

的内容
@echo off
REM will go to standard output
ipconfig
REM will go to stadnard error
hey there!

您可以读取连接到子流程的标准和错误输出的输入流:

ProcessBuilder pb = new ProcessBuilder("C:\\tmp\\ip_conf.bat");
Process p = pb.start();
String pOut = "";
try (InputStream stdOut = p.getInputStream();
        BufferedInputStream bufferedStdOut = new BufferedInputStream(stdOut);
        ByteArrayOutputStream result = new ByteArrayOutputStream();) {

    int bytes = 0;
    while ((bytes = bufferedStdOut.read()) != -1) {
        result.write(bytes);
    }
    pOut = result.toString(Charset.defaultCharset().toString());
}
System.out.println(pOut);

InputStream stdErr = p.getErrorStream();
// same with the error stream ...

int exit = p.waitFor();
System.out.println("Subprocess exited with " + exit);

答案 1 :(得分:0)

以下程序将帮助您将任何脚本或任何命令的完整输出存储到String对象中。

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class ExecuteShellComand {

    public static void main(String[] args) {

        ExecuteShellComand obj = new ExecuteShellComand();

        String output = obj.executeCommand("sh /opt/yourScriptLocation/Script.sh");

        System.out.println(output);

    }

    private String executeCommand(String command) {

        StringBuffer output = new StringBuffer();

        Process p;
        try {
            p = Runtime.getRuntime().exec(command);
            p.waitFor();
            BufferedReader reader =
                            new BufferedReader(new InputStreamReader(p.getInputStream()));

                        String line = "";
            while ((line = reader.readLine())!= null) {
                output.append(line + "\n");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return output.toString();

    }

}

答案 2 :(得分:-1)

我只是google它,并且有一个很好的教程,这里有很多示例:http://www.mkyong.com/java/how-to-execute-shell-command-from-java/

我知道人们喜欢复制/粘贴,但让我们尊重别人的工作并进入他们的网站:p