2012-01-24 85 views
4

我正在尋找可用於從我的Java代碼發送Unix命令的庫。我已經嘗試過Expect4J和Gaynmed,但沒有找到好的文檔。我的要求包括:運行來自Java的unix命令的庫

  1. 運行多個命令。
  2. 捕獲前一個命令的輸出。
  3. 採取一些行動/根據最後一個命令的輸出運行不同的命令。

任何指針將不勝感激。

回答

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); 
} 
+0

感謝您的回答。我沒有嘗試過sshxcute,但是它允許我在一個會話中運行多個命令,還是需要在每個命令後關閉會話? – Vivek

+0

您可以在一個會話中運行多個命令。檢查谷歌代碼頁。它有所有的細節。底部的代碼在一個會話中清楚地執行兩個命令ct1和ct2。 –

3

Java標準庫中的ProcessBuilder類支持創建進程並讀取其輸出。你應該能夠構建它來做你所需要的,並且在標準庫中,它有很好的文檔。

+0

這不是什麼他問。他想使用ssh在遠程服務器上運行命令。檢查我的答案。 –

+0

@Michael謝謝你的回答。我還沒有嘗試ProcessBuilder,但是它允許我在一個會話中運行多個命令,還是需要在每個命令後關閉會話? – Vivek

+0

@ user473768'ProcessBuilder'實際上並沒有「會話」,但是您應該可以爲多個進程重用相同的'ProcessBuilder'實例。 –

0

取決於你在做什麼ANT是一個好方法。如果你創建了一個ant腳本,你可以在java中執行該腳本。螞蟻在其他環境下也會得到更好的支持

2

ProcessBuilder是否不足以滿足您的需求?您當然可以獲取輸出流並獲取最後一個命令的退出值,這足以通過一些正則表達式來執行#3。不清楚#1。但是在原始的ProcessBuilder上做你想要的東西看起來像是一個非常輕量級的解決方案。

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html

+0

感謝您的回答。我還沒有嘗試ProcessBuilder,但是它允許我在一個會話中運行多個命令,還是需要在每個命令後關閉會話? – Vivek

2

你有沒有考慮過Java的內置Process類?您可以檢索命令的退出值並獲取shell的輸出。

1

使用exec()方法有什麼問題嗎?

Process p = Runtime.getRuntime().exec("ls -l"); 

您可以通過執行該命令的輸出閱讀以下內容:

BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); 
1

如果你的命令很簡單,沒有互動,你可以EM使用純Java的,如下運行」:

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?