Обрабатывать ввод с помощью StreamGobbler
Я был через StreamGobbler по следующему URL
Я понимаю использование и причину, по которой это было реализовано. Однако рассматриваются только те сценарии, в которых может быть вывод ошибок команды / обработки.
Я не нахожу никакого сценария, в котором StreamGobbler используется для обработки входных данных. Например, в mailx
Я должен указать тело письма, которое я сделал в следующем формате
Process proc = Runtime.getRuntime().exec(cmd);
OutputStreamWriter osw = new OutputStreamWriter(proc.getOutputStream());
osw.write(mailBody);
osw.close();
Как это может быть обработано через StreamGobbler, или это не требуется обрабатывать через него.
1 ответ
В идеале вы должны использовать StreamGobbler
на вашем потоке ошибок (в отдельном потоке), если вы уже ожидаете что-то на InputStream
, чтобы посмотреть, когда process.waitFor()
возвращает ненулевое значение, чтобы узнать сообщение об ошибке. Если вы не заинтересованы в InputStream
затем вы можете прочитать ErrorStream непосредственно в своем коде, как только вы закончите с вводом своих данных для команды.
Process proc = Runtime.getRuntime().exec(cmd)
// Start a stream gobbler to read the error stream.
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream());
errorGobbler.start();
OutputStreamWriter osw = new OutputStreamWriter(proc.getOutputStream())
osw.write(mailBody)
osw.close();
int exitStatus = proc.waitFor();
if (0 != exitStatus) {
/*
* If you had not used a StreamGobbler to read the errorStream, you wouldn't have
* had a chance to know what went wrong with this command execution.
*/
LOG.warn("Error while sending email: " + errorGobbler.getContent());
}