从Java运行unix命令的库

时间:2012-01-24 22:14:31

标签: java unix

我正在寻找可用于从我的Java代码发送Unix命令的库。我已经尝试过Expect4J和Gaynmed,但是找不到好的文档。我的要求包括:

  1. 运行多个命令。
  2. 捕获上一个命令的输出。
  3. 执行一些操作/根据上一个命令的输出运行不同的命令。
  4. 任何指针都将受到赞赏。

8 个答案:

答案 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

另外,请检查:How to run Unix shell script from java code?

答案 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);