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