JAvaでローカルスクリプトを呼び出す
2525 ワード
JAvaではローカルスクリプトを呼び出すことも、shellスクリプトをリモートで呼び出すこともできますが、javaでリモートスクリプトを呼び出すのは安全ではありません.一般的にはそうしません.どうやって呼び出すのでしょうか.ローカルにスクリプトを書いてリモートスクリプトを呼び出し、javaプログラムでローカルスクリプトを呼び出すことをお勧めします.具体的なコード:
注:スクリプトの実行に成功すると、process.waitFor()は0ステータスコードを返します.スクリプト実行エラーが発生した場合、このエラーに基づいて異なるステータスコードが返されます.この場合、ストリームを使用してスクリプトが返すステータスを取得する必要があります.
private int execShell(String shellPath, String... params) {
StringBuilder command = new StringBuilder(shellPath).append(" ");
for (String param : params) {
command.append(param).append(" ");
}
BufferedReader br = null;
StringBuilder sb = null;
try {
Process process = Runtime.getRuntime().exec(command.toString());
process.waitFor();
br = new BufferedReader(new InputStreamReader(process.getInputStream()));
sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
} catch (Exception e) {
LOG.error("execShell() error, shellPath: {}, params: {}", shellPath, params, e);
return -2;
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return "".equals(sb.toString()) ? 0 : Integer.parseInt(sb.toString());
}
注:スクリプトの実行に成功すると、process.waitFor()は0ステータスコードを返します.スクリプト実行エラーが発生した場合、このエラーに基づいて異なるステータスコードが返されます.この場合、ストリームを使用してスクリプトが返すステータスを取得する必要があります.