我正在寻找可用于从我的Java代码发送Unix命令的库。我已经尝试过Expect4J和Gaynmed,但是找不到好的文档。我的要求包括:
任何指针都将受到赞赏。
答案 0 :(得分:6)
查看您提到的库的名称,您似乎希望使用ssh在远程服务器上运行命令。
查看http://code.google.com/p/sshxcute/
代码非常简单
// Initialize a ConnBean object, parameter list is ip, username, password
ConnBean cb = new ConnBean("ip ", "username","password");
// Put the ConnBean instance as parameter for SSHExec static method getInstance(ConnBean) to retrieve a singleton SSHExec instance
ssh = SSHExec.getInstance(cb);
// Connect to server
ssh.connect();
CustomTask sampleTask = new ExecCommand("echo 123");
ssh.exec(sampleTask);
获得输出也很容易。只需查看我提供的链接。
Result res = ssh.exec(task);
if (res.isSuccess) {
System.out.println("Return code: " + res.rc);
System.out.println("sysout: " + res.sysout);
} else {
System.out.println("Return code: " + res.rc);
System.out.println("error message: " + res.error_msg);
}
答案 1 :(得分:3)
Java标准库中的ProcessBuilder
类支持创建进程并读取其输出。你应该能够构建它来做你需要的东西,并且在标准库中,它有很好的文档。
答案 2 :(得分:2)
ProcessBuilder不足以满足您的需求吗?您当然可以获取输出流并获取最后一个命令的退出值,这足以通过某些正则表达式执行#3。在#1上不确定。但是在原始的ProcessBuilder上做你想要的东西似乎是一个非常轻量级的解决方案。
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html
答案 3 :(得分:2)
您是否考虑过Java的内置Process
课程?您可以检索命令的退出值并获取shell的输出。
答案 4 :(得分:1)
使用exec()
方法有什么问题吗?
Process p = Runtime.getRuntime().exec("ls -l");
您可以通过执行以下操作来读取此命令的输出:
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
答案 5 :(得分:1)
如果您的命令很简单而不是交互式,则可以使用普通java运行'em,如下所示:
Process process = runtime.exec("unix command");
InputStream iStream = process.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(iStream);
BufferedReader bufReader = new BufferedReader(inputStreamReader);
while ((String line = bufReader.readLine()) != null) {
System.out.println("\nOUTPUT = " + line);
}
对于图书馆,请检查ProcessBuilder。
答案 6 :(得分:0)
取决于你在做什么ANT是一个很好的方法。如果您创建了一个ant脚本,则可以在java中执行该脚本。在其他环境中也可以更好地支持Ant
答案 7 :(得分:0)
尝试一下:https://github.com/fleipold/jproc
基本用法:
String output = ProcBuilder.run("echo", "Hello World!");
assertEquals("Hello World!\n", output);