From 2403504b44de773c3f566e7d647bc0e8661af918 Mon Sep 17 00:00:00 2001 From: Jeff Forcier Date: Wed, 28 Nov 2012 22:22:33 -0800 Subject: [PATCH] Fix #113: add timeout passthru to exec_command --- NEWS | 7 +++++++ paramiko/client.py | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 5542046..0627ad8 100644 --- a/NEWS +++ b/NEWS @@ -12,6 +12,13 @@ Issues noted as "Fabric #NN" can be found at https://github.com/fabric/fabric/. Releases ======== +v1.10.0 (DD MM YYYY) +-------------------- + +* #113: Add `timeout` parameter to `SSHClient.exec_command` for easier setting + of the command's internal channel object's timeout. Thanks to Cernov Vladimir + for the patch. + v1.9.0 (6th Nov 2012) --------------------- diff --git a/paramiko/client.py b/paramiko/client.py index 07560a3..97ae449 100644 --- a/paramiko/client.py +++ b/paramiko/client.py @@ -350,7 +350,7 @@ class SSHClient (object): self._agent.close() self._agent = None - def exec_command(self, command, bufsize=-1): + def exec_command(self, command, bufsize=-1, timeout=None): """ Execute a command on the SSH server. A new L{Channel} is opened and the requested command is executed. The command's input and output @@ -361,12 +361,15 @@ class SSHClient (object): @type command: str @param bufsize: interpreted the same way as by the built-in C{file()} function in python @type bufsize: int + @param timeout: set command's channel timeout. See L{Channel.settimeout}.settimeout + @type timeout: int @return: the stdin, stdout, and stderr of the executing command @rtype: tuple(L{ChannelFile}, L{ChannelFile}, L{ChannelFile}) @raise SSHException: if the server fails to execute the command """ chan = self._transport.open_session() + chan.settimeout(timeout) chan.exec_command(command) stdin = chan.makefile('wb', bufsize) stdout = chan.makefile('rb', bufsize)