- protected void readStdOut(Channel channel) {
- BufferedReader stdOut = null;
- try {
- InputStream in = channel.getInputStream();
- stdOut = new BufferedReader(new InputStreamReader(in));
- String line = null;
- while ((line = stdOut.readLine()) != null) {
- if (!line.trim().equals("")) {
- if (stdOutLines != null) {
- stdOutLines.add(line);
- if (logEvenIfStdOutLines && !quiet)
- log.info(line);
- } else {
- if (!quiet)
- log.info(line);
+ protected void readStdErr(final ChannelExec channel) {
+ if (streamHandler != null) {
+ try {
+ streamHandler.setProcessOutputStream(channel.getErrStream());
+ } catch (IOException e) {
+ throw new SlcException("Cannot read stderr from "
+ + getSshTarget(), e);
+ }
+ } else {
+ new Thread("stderr " + getSshTarget()) {
+ public void run() {
+ BufferedReader stdErr = null;
+ try {
+ InputStream in = channel.getErrStream();
+ stdErr = new BufferedReader(new InputStreamReader(in));
+ String line = null;
+ while ((line = stdErr.readLine()) != null) {
+ if (!line.trim().equals(""))
+ log.error(line);
+ }
+ } catch (IOException e) {
+ if (log.isDebugEnabled())
+ log.error("Cannot read stderr from "
+ + getSshTarget(), e);
+ } finally {
+ IOUtils.closeQuietly(stdErr);
+ }
+ }
+ }.start();
+ }
+ }
+
+ protected void readStdIn(final ChannelExec channel) {
+ if (stdIn != null) {
+ Thread stdInThread = new Thread("Stdin " + getSshTarget()) {
+ @Override
+ public void run() {
+ OutputStream out = null;
+ try {
+ out = channel.getOutputStream();
+ IOUtils.copy(stdIn.getInputStream(), out);
+ } catch (IOException e) {
+ throw new SlcException("Cannot write stdin on "
+ + getSshTarget(), e);
+ } finally {
+ IOUtils.closeQuietly(out);