diff options
author | Rex Lee <limingjiang@huawei.com> | 2016-12-01 01:05:28 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@opnfv.org> | 2016-12-01 01:05:28 +0000 |
commit | 322405412df26c8a0ee7f3a5aaa3b115950e97c8 (patch) | |
tree | 96cfafdb5d3d01625e2b4092a435c339bdfdb0d6 /yardstick | |
parent | e12bcf0b3acdff1b483e0a7705c77acdee394c06 (diff) | |
parent | a8db6ed817a39632bed19e0ece64f1862231db16 (diff) |
Merge "ssh.py: add flag to keep stdin open"
Diffstat (limited to 'yardstick')
-rw-r--r-- | yardstick/ssh.py | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/yardstick/ssh.py b/yardstick/ssh.py index 5d5719b33..8485dccd0 100644 --- a/yardstick/ssh.py +++ b/yardstick/ssh.py @@ -151,10 +151,12 @@ class SSH(object): self._client = False def run(self, cmd, stdin=None, stdout=None, stderr=None, - raise_on_error=True, timeout=3600): + raise_on_error=True, timeout=3600, + keep_stdin_open=False): """Execute specified command on the server. :param cmd: Command to be executed. + :type cmd: str :param stdin: Open file or string to pass to stdin. :param stdout: Open file to connect to stdout. :param stderr: Open file to connect to stderr. @@ -162,6 +164,8 @@ class SSH(object): then exception will be raized if non-zero code. :param timeout: Timeout in seconds for command execution. Default 1 hour. No timeout if set to 0. + :param keep_stdin_open: don't close stdin on empty reads + :type keep_stdin_open: bool """ client = self._get_client() @@ -171,10 +175,12 @@ class SSH(object): return self._run(client, cmd, stdin=stdin, stdout=stdout, stderr=stderr, raise_on_error=raise_on_error, - timeout=timeout) + timeout=timeout, + keep_stdin_open=keep_stdin_open) def _run(self, client, cmd, stdin=None, stdout=None, stderr=None, - raise_on_error=True, timeout=3600): + raise_on_error=True, timeout=3600, + keep_stdin_open=False): transport = client.get_transport() session = transport.open_session() @@ -214,13 +220,15 @@ class SSH(object): if not data_to_send: data_to_send = stdin.read(4096) if not data_to_send: - stdin.close() - session.shutdown_write() - writes = [] - continue - sent_bytes = session.send(data_to_send) - # LOG.debug("sent: %s" % data_to_send[:sent_bytes]) - data_to_send = data_to_send[sent_bytes:] + # we may need to keep stdin open + if not keep_stdin_open: + stdin.close() + session.shutdown_write() + writes = [] + if data_to_send: + sent_bytes = session.send(data_to_send) + # LOG.debug("sent: %s" % data_to_send[:sent_bytes]) + data_to_send = data_to_send[sent_bytes:] if session.exit_status_ready(): break |