我正在尋找可用於從我的Java代碼發送Unix命令的庫。我已經嘗試過Expect4J和Gaynmed,但沒有找到好的文檔。我的要求包括:運行來自Java的unix命令的庫
- 運行多個命令。
- 捕獲前一個命令的輸出。
- 採取一些行動/根據最後一個命令的輸出運行不同的命令。
任何指針將不勝感激。
我正在尋找可用於從我的Java代碼發送Unix命令的庫。我已經嘗試過Expect4J和Gaynmed,但沒有找到好的文檔。我的要求包括:運行來自Java的unix命令的庫
任何指針將不勝感激。
看看你提到的庫的名字,看來你想用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);
}
Java標準庫中的ProcessBuilder
類支持創建進程並讀取其輸出。你應該能夠構建它來做你所需要的,並且在標準庫中,它有很好的文檔。
這不是什麼他問。他想使用ssh在遠程服務器上運行命令。檢查我的答案。 –
@Michael謝謝你的回答。我還沒有嘗試ProcessBuilder,但是它允許我在一個會話中運行多個命令,還是需要在每個命令後關閉會話? – Vivek
@ user473768'ProcessBuilder'實際上並沒有「會話」,但是您應該可以爲多個進程重用相同的'ProcessBuilder'實例。 –
取決於你在做什麼ANT是一個好方法。如果你創建了一個ant腳本,你可以在java中執行該腳本。螞蟻在其他環境下也會得到更好的支持
ProcessBuilder是否不足以滿足您的需求?您當然可以獲取輸出流並獲取最後一個命令的退出值,這足以通過一些正則表達式來執行#3。不清楚#1。但是在原始的ProcessBuilder上做你想要的東西看起來像是一個非常輕量級的解決方案。
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html
感謝您的回答。我還沒有嘗試ProcessBuilder,但是它允許我在一個會話中運行多個命令,還是需要在每個命令後關閉會話? – Vivek
你有沒有考慮過Java的內置Process
類?您可以檢索命令的退出值並獲取shell的輸出。
使用exec()
方法有什麼問題嗎?
Process p = Runtime.getRuntime().exec("ls -l");
您可以通過執行該命令的輸出閱讀以下內容:
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
如果你的命令很簡單,沒有互動,你可以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。
感謝您的回答。我沒有嘗試過sshxcute,但是它允許我在一個會話中運行多個命令,還是需要在每個命令後關閉會話? – Vivek
您可以在一個會話中運行多個命令。檢查谷歌代碼頁。它有所有的細節。底部的代碼在一個會話中清楚地執行兩個命令ct1和ct2。 –