我有一個(gè)運(yùn)行 shell 命令的 Java 程序。一切正常,我可以查看命令是否有效或有錯(cuò)誤...除了命令提示用戶輸入更多信息時(shí)。例如,當(dāng)我運(yùn)行命令ssh-keygen -t rsa -b 4096 -f my_key_name時(shí),程序?qū)⒂肋h(yuǎn)旋轉(zhuǎn)而不返回給用戶,因?yàn)樗诘却逸斎朊艽a?,F(xiàn)在我知道我可以-P ""跳過我添加密碼,但我的問題是其他提示信息的命令。我只想知道如何將提示文本返回給用戶(因?yàn)槲也⒉徽嬲枰脩糨斎胨麄儗?duì)提示的響應(yīng)的能力)。RunCommandDto runCommandDto = new RunCommandDto();Runtime rt = Runtime.getRuntime();Process proc = rt.exec('ssh-keygen -t rsa -b 4096 -f my_key_name');BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream()));String output = "";while ((String sInOut = stdInput.readLine()) != null) { output += sInOut + "\n";}while ((String sErr = stdError.readLine()) != null) { output += sErr + "\n";}
1 回答

繁華開滿天機(jī)
TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊
exec 進(jìn)程的stdin可以通過proc.getOutputStream()
您通過此流發(fā)送的所有內(nèi)容訪問,將通過其stdin傳遞給 ssh-keygen 進(jìn)程。
當(dāng)然,如果您不發(fā)送它所期望的那種輸入,該過程可能只是返回一些警告消息并繼續(xù)等待。您需要發(fā)送的內(nèi)容將在很大程度上取決于您將其發(fā)送到的過程。
另外:您正在通過讀取 InputStream 和錯(cuò)誤流來處理 ssh-keygen 的輸出。但是,您可能希望在單獨(dú)的線程中執(zhí)行此操作 - 就像您現(xiàn)在擁有的那樣,如果進(jìn)程在寫入 stdout 之前向 stderr 寫入太多,它可能會(huì)因?yàn)榫彌_區(qū)已滿而掛起......
添加回答
舉報(bào)
0/150
提交
取消