可以将linux shell中的命令输出到JAVA应用程序吗?如果可能的话怎么样?我看到有机会从JAVA执行一个shell命令我希望得到相反的结果:SHELL COMMANDS OUTPUT ---> to ---> Java VARIABLE或STRING。谢谢你的回复
答案 0 :(得分:1)
好的,假设你想在linux中运行X命令。
然后在终端类型:
x > "myfilename"
举一个例子:
netstat > "xyz"
这将创建一个文件'xyz'并将所有输出传输给它。
这会将所有输出都放到'myfilename'。
现在,您可以从java应用程序中读取该文件的所有内容。
替代:
您可以从java运行shell命令并收集输出以供以后处理。
答案 1 :(得分:0)
假设您在启动java程序时尝试将linux命令的输出传递给java,这在bash
中很简单。使用反向标记(`)在您放置命令行参数的位置包围linux命令。 E.g:
$ java [... java options, like -jar path/to/file.jar ...] -- `linux-command`
(如果输出包含空格,您可能需要做一些引号或某种类型的转义。)
然后,在您的java程序中,该值将位于args
数组中:
public static void main(String args[]) {
String linuxCommandOutput = args[0];
// rest of program...
}
如果由于某种原因无法使用args
,则可以尝试使用系统属性。再次,使用back-ticks(`)来包围linux命令并将其存储在具有-D
的系统属性中。像这样:
$ java -Dvariable=`linux-command` [... java options ...]
然后,在您的java程序中,读取系统属性的值:
public static void main(String args[]) {
String linuxCommandOutput = System.getProperty("variable");
// rest of program...
}
答案 2 :(得分:0)
您可以使用jcraft然后执行返回输出的命令
实施例
host = //your hostIP;
String user = "username";
String password = "pwd";
String command = "the command you want to execute";
try {
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, 22);
session.setPassword(password);
session.setConfig(config);
session.connect();
System.out.println("Connected");
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(command);
channel.setInputStream(null);
((ChannelExec) channel).setErrStream(System.err);
InputStream in = channel.getInputStream();
channel.connect();
byte[] tmp = new byte[1024];
while (true) {
while (in.available() > 0) {
int i = in.read(tmp, 0, 1024);
if (i < 0)
break;
area.append(new String(tmp, 0, i));
//System.out.print(new String(tmp, 0, i)); //command output
}
if (channel.isClosed()) {
System.out.println("exit-status: " + channel.getExitStatus());
break;
}
try {
Thread.sleep(1000);
} catch (Exception ee) {
}
}
channel.disconnect();
session.disconnect();
System.out.println("DONE");
} catch (Exception e) {
e.printStackTrace();
return false;
}