我正嘗試使用Web瀏覽器與服務器上的CLI進行交互。在服務器端,我使用在JBoss AS 7.1.1.Final上運行的Java Servlet。 CLI是一個ovirt引擎工具(ovirt-iso-uploader)。爲了使用它,您必須在請求時提供REST API密碼。無法使用Java ProcessBuilder輸入密碼以與CLI進行交互
因此,這裏是下面的代碼我使用與CLI交互:
private String executeCommand(String command) {
System.out.println("Executing command: " + command);
String[] commands = new String[]{"/bin/sh","-c",command};
try {
ProcessBuilder builder = new ProcessBuilder(commands);
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = reader.readLine())!= null) {
System.out.println(line);
if (line.contains("Please provide the REST API password")){
writer.write("password\n");
writer.flush();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
不過,我使用的是什麼輸入的命令,我一直有同樣的問題。 (在這個例子中我使用的命令ovirt-iso-uploader list
列出所有ISO存儲域,你可以找到CLI here的文檔)
11:31:34,282 INFO [stdout] (http--0.0.0.0-8080-2) Executing command: ovirt-iso-uploader list
Please provide the REST API password for the [email protected] oVirt Engine user (CTRL+D to abort):
所以執行此封端爲CLI正在等待密碼和Servlet無法看到Please provide the REST API password for the [email protected] oVirt Engine user (CTRL+D to abort):
行,因爲它沒有發送到[stdout]
。但是,如果我直接在終端中手動輸入密碼,它正在工作。
因此,我的問題是如何從CLI讀取密碼請求並回答它?
謝謝你的時間。
您可能要檢查類似於「期望」庫的功能,請參閱http://stackoverflow.com/questions/6394836/ssh-in-java-app-with-expect-like-functionality ...只使用Java的「內置」功能自己做這件事可能會變得很難** – GhostCat
你確定你的if條件是真的嗎?你可以在裏面放一個println來確認嗎? – assylias
@Jägermeister謝謝我會看看。但是,你是否知道爲什麼密碼請求不在'[stdout]'中? –