Channel info fields
This commit is contained in:
parent
7df1ae9602
commit
f556c8f0ae
|
@ -62,9 +62,8 @@ class Channel (object):
|
||||||
Normally you would only call this method from the constructor of a
|
Normally you would only call this method from the constructor of a
|
||||||
subclass of `.Channel`.
|
subclass of `.Channel`.
|
||||||
|
|
||||||
:param chanid: the ID of this channel, as passed by an existing
|
:param int chanid:
|
||||||
`.Transport`.
|
the ID of this channel, as passed by an existing `.Transport`.
|
||||||
:type chanid: int
|
|
||||||
"""
|
"""
|
||||||
self.chanid = chanid
|
self.chanid = chanid
|
||||||
self.remote_chanid = 0
|
self.remote_chanid = 0
|
||||||
|
@ -104,8 +103,6 @@ class Channel (object):
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
"""
|
"""
|
||||||
Return a string representation of this object, for debugging.
|
Return a string representation of this object, for debugging.
|
||||||
|
|
||||||
:rtype: str
|
|
||||||
"""
|
"""
|
||||||
out = '<paramiko.Channel %d' % self.chanid
|
out = '<paramiko.Channel %d' % self.chanid
|
||||||
if self.closed:
|
if self.closed:
|
||||||
|
@ -131,16 +128,11 @@ class Channel (object):
|
||||||
It isn't necessary (or desirable) to call this method if you're going
|
It isn't necessary (or desirable) to call this method if you're going
|
||||||
to exectue a single command with `exec_command`.
|
to exectue a single command with `exec_command`.
|
||||||
|
|
||||||
:param term: the terminal type to emulate (for example, ``'vt100'``)
|
:param str term: the terminal type to emulate (for example, ``'vt100'``)
|
||||||
:type term: str
|
:param int width: width (in characters) of the terminal screen
|
||||||
:param width: width (in characters) of the terminal screen
|
:param int height: height (in characters) of the terminal screen
|
||||||
:type width: int
|
:param int width_pixels: width (in pixels) of the terminal screen
|
||||||
:param height: height (in characters) of the terminal screen
|
:param int height_pixels: height (in pixels) of the terminal screen
|
||||||
:type height: int
|
|
||||||
:param width_pixels: width (in pixels) of the terminal screen
|
|
||||||
:type width_pixels: int
|
|
||||||
:param height_pixels: height (in pixels) of the terminal screen
|
|
||||||
:type height_pixels: int
|
|
||||||
|
|
||||||
:raises SSHException:
|
:raises SSHException:
|
||||||
if the request was rejected or the channel was closed
|
if the request was rejected or the channel was closed
|
||||||
|
@ -199,8 +191,7 @@ class Channel (object):
|
||||||
can't be reused. You must open a new channel if you wish to execute
|
can't be reused. You must open a new channel if you wish to execute
|
||||||
another command.
|
another command.
|
||||||
|
|
||||||
:param command: a shell command to execute.
|
:param str command: a shell command to execute.
|
||||||
:type command: str
|
|
||||||
|
|
||||||
:raises SSHException: if the request was rejected or the channel was
|
:raises SSHException: if the request was rejected or the channel was
|
||||||
closed
|
closed
|
||||||
|
@ -226,11 +217,10 @@ class Channel (object):
|
||||||
When the subsystem finishes, the channel will be closed and can't be
|
When the subsystem finishes, the channel will be closed and can't be
|
||||||
reused.
|
reused.
|
||||||
|
|
||||||
:param subsystem: name of the subsystem being requested.
|
:param str subsystem: name of the subsystem being requested.
|
||||||
:type subsystem: str
|
|
||||||
|
|
||||||
:raises SSHException: if the request was rejected or the channel was
|
:raises SSHException:
|
||||||
closed
|
if the request was rejected or the channel was closed
|
||||||
"""
|
"""
|
||||||
if self.closed or self.eof_received or self.eof_sent or not self.active:
|
if self.closed or self.eof_received or self.eof_sent or not self.active:
|
||||||
raise SSHException('Channel is not open')
|
raise SSHException('Channel is not open')
|
||||||
|
@ -249,17 +239,13 @@ class Channel (object):
|
||||||
Resize the pseudo-terminal. This can be used to change the width and
|
Resize the pseudo-terminal. This can be used to change the width and
|
||||||
height of the terminal emulation created in a previous `get_pty` call.
|
height of the terminal emulation created in a previous `get_pty` call.
|
||||||
|
|
||||||
:param width: new width (in characters) of the terminal screen
|
:param int width: new width (in characters) of the terminal screen
|
||||||
:type width: int
|
:param int height: new height (in characters) of the terminal screen
|
||||||
:param height: new height (in characters) of the terminal screen
|
:param int width_pixels: new width (in pixels) of the terminal screen
|
||||||
:type height: int
|
:param int height_pixels: new height (in pixels) of the terminal screen
|
||||||
:param width_pixels: new width (in pixels) of the terminal screen
|
|
||||||
:type width_pixels: int
|
|
||||||
:param height_pixels: new height (in pixels) of the terminal screen
|
|
||||||
:type height_pixels: int
|
|
||||||
|
|
||||||
:raises SSHException: if the request was rejected or the channel was
|
:raises SSHException:
|
||||||
closed
|
if the request was rejected or the channel was closed
|
||||||
"""
|
"""
|
||||||
if self.closed or self.eof_received or self.eof_sent or not self.active:
|
if self.closed or self.eof_received or self.eof_sent or not self.active:
|
||||||
raise SSHException('Channel is not open')
|
raise SSHException('Channel is not open')
|
||||||
|
@ -281,8 +267,9 @@ class Channel (object):
|
||||||
want to block in `recv_exit_status`. Note that the server may not
|
want to block in `recv_exit_status`. Note that the server may not
|
||||||
return an exit status in some cases (like bad servers).
|
return an exit status in some cases (like bad servers).
|
||||||
|
|
||||||
:return: True if `recv_exit_status` will return immediately
|
:return:
|
||||||
:rtype: bool
|
``True`` if `recv_exit_status` will return immediately, else ``False``.
|
||||||
|
|
||||||
.. versionadded:: 1.7.3
|
.. versionadded:: 1.7.3
|
||||||
"""
|
"""
|
||||||
return self.closed or self.status_event.isSet()
|
return self.closed or self.status_event.isSet()
|
||||||
|
@ -295,8 +282,7 @@ class Channel (object):
|
||||||
it does, or until the channel is closed. If no exit status is
|
it does, or until the channel is closed. If no exit status is
|
||||||
provided by the server, -1 is returned.
|
provided by the server, -1 is returned.
|
||||||
|
|
||||||
:return: the exit code of the process on the server.
|
:return: the exit code (as an `int`) of the process on the server.
|
||||||
:rtype: int
|
|
||||||
|
|
||||||
.. versionadded:: 1.2
|
.. versionadded:: 1.2
|
||||||
"""
|
"""
|
||||||
|
@ -311,8 +297,7 @@ class Channel (object):
|
||||||
get some sort of status code back from an executed command after
|
get some sort of status code back from an executed command after
|
||||||
it completes.
|
it completes.
|
||||||
|
|
||||||
:param status: the exit code of the process
|
:param int status: the exit code of the process
|
||||||
:type status: int
|
|
||||||
|
|
||||||
.. versionadded:: 1.2
|
.. versionadded:: 1.2
|
||||||
"""
|
"""
|
||||||
|
@ -351,20 +336,19 @@ class Channel (object):
|
||||||
|
|
||||||
handler(channel: Channel, (address: str, port: int))
|
handler(channel: Channel, (address: str, port: int))
|
||||||
|
|
||||||
:param screen_number: the x11 screen number (0, 10, etc)
|
:param int screen_number: the x11 screen number (0, 10, etc)
|
||||||
:type screen_number: int
|
:param str auth_protocol:
|
||||||
:param auth_protocol: the name of the X11 authentication method used;
|
the name of the X11 authentication method used; if none is given,
|
||||||
if none is given, ``"MIT-MAGIC-COOKIE-1"`` is used
|
``"MIT-MAGIC-COOKIE-1"`` is used
|
||||||
:type auth_protocol: str
|
:param str auth_cookie:
|
||||||
:param auth_cookie: hexadecimal string containing the x11 auth cookie;
|
hexadecimal string containing the x11 auth cookie; if none is
|
||||||
if none is given, a secure random 128-bit value is generated
|
given, a secure random 128-bit value is generated
|
||||||
:type auth_cookie: str
|
:param bool single_connection:
|
||||||
:param single_connection: if True, only a single x11 connection will be
|
if True, only a single x11 connection will be forwarded (by
|
||||||
forwarded (by default, any number of x11 connections can arrive
|
default, any number of x11 connections can arrive over this
|
||||||
over this session)
|
session)
|
||||||
:type single_connection: bool
|
:param function handler:
|
||||||
:param handler: an optional handler to use for incoming X11 connections
|
an optional handler to use for incoming X11 connections
|
||||||
:type handler: function
|
|
||||||
:return: the auth_cookie used
|
:return: the auth_cookie used
|
||||||
"""
|
"""
|
||||||
if self.closed or self.eof_received or self.eof_sent or not self.active:
|
if self.closed or self.eof_received or self.eof_sent or not self.active:
|
||||||
|
@ -394,11 +378,10 @@ class Channel (object):
|
||||||
Request for a forward SSH Agent on this channel.
|
Request for a forward SSH Agent on this channel.
|
||||||
This is only valid for an ssh-agent from OpenSSH !!!
|
This is only valid for an ssh-agent from OpenSSH !!!
|
||||||
|
|
||||||
:param handler: a required handler to use for incoming SSH Agent connections
|
:param function handler:
|
||||||
:type handler: function
|
a required handler to use for incoming SSH Agent connections
|
||||||
|
|
||||||
:return: if we are ok or not (at that time we always return ok)
|
:return: True if we are ok, else False (at that time we always return ok)
|
||||||
:rtype: boolean
|
|
||||||
|
|
||||||
:raises: SSHException in case of channel problem.
|
:raises: SSHException in case of channel problem.
|
||||||
"""
|
"""
|
||||||
|
@ -417,9 +400,6 @@ class Channel (object):
|
||||||
def get_transport(self):
|
def get_transport(self):
|
||||||
"""
|
"""
|
||||||
Return the `.Transport` associated with this channel.
|
Return the `.Transport` associated with this channel.
|
||||||
|
|
||||||
:return: the `.Transport` that was used to create this channel.
|
|
||||||
:rtype: `.Transport`
|
|
||||||
"""
|
"""
|
||||||
return self.transport
|
return self.transport
|
||||||
|
|
||||||
|
@ -429,29 +409,24 @@ class Channel (object):
|
||||||
of the channel in logfile entries. The name can be fetched with the
|
of the channel in logfile entries. The name can be fetched with the
|
||||||
`get_name` method.
|
`get_name` method.
|
||||||
|
|
||||||
:param name: new channel name
|
:param str name: new channel name
|
||||||
:type name: str
|
|
||||||
"""
|
"""
|
||||||
self._name = name
|
self._name = name
|
||||||
|
|
||||||
def get_name(self):
|
def get_name(self):
|
||||||
"""
|
"""
|
||||||
Get the name of this channel that was previously set by `set_name`.
|
Get the name of this channel that was previously set by `set_name`.
|
||||||
|
|
||||||
:return: the name of this channel.
|
|
||||||
:rtype: str
|
|
||||||
"""
|
"""
|
||||||
return self._name
|
return self._name
|
||||||
|
|
||||||
def get_id(self):
|
def get_id(self):
|
||||||
"""
|
"""
|
||||||
Return the ID # for this channel. The channel ID is unique across
|
Return the `int` ID # for this channel.
|
||||||
a `.Transport` and usually a small number. It's also the number
|
|
||||||
passed to `.ServerInterface.check_channel_request` when determining
|
|
||||||
whether to accept a channel request in server mode.
|
|
||||||
|
|
||||||
:return: the ID of this channel.
|
The channel ID is unique across a `.Transport` and usually a small
|
||||||
:rtype: int
|
number. It's also the number passed to
|
||||||
|
`.ServerInterface.check_channel_request` when determining whether to
|
||||||
|
accept a channel request in server mode.
|
||||||
"""
|
"""
|
||||||
return self.chanid
|
return self.chanid
|
||||||
|
|
||||||
|
@ -469,11 +444,10 @@ class Channel (object):
|
||||||
If this is ``True``, data will never show up via `recv_stderr` or
|
If this is ``True``, data will never show up via `recv_stderr` or
|
||||||
`recv_stderr_ready`.
|
`recv_stderr_ready`.
|
||||||
|
|
||||||
:param combine: ``True`` if stderr output should be combined into
|
:param bool combine:
|
||||||
stdout on this channel.
|
``True`` if stderr output should be combined into stdout on this
|
||||||
:type combine: bool
|
channel.
|
||||||
:return: previous setting.
|
:return: the previous setting (a `bool`).
|
||||||
:rtype: bool
|
|
||||||
|
|
||||||
.. versionadded:: 1.1
|
.. versionadded:: 1.1
|
||||||
"""
|
"""
|
||||||
|
@ -507,9 +481,9 @@ class Channel (object):
|
||||||
``chan.settimeout(0.0)`` is equivalent to ``chan.setblocking(0)``;
|
``chan.settimeout(0.0)`` is equivalent to ``chan.setblocking(0)``;
|
||||||
``chan.settimeout(None)`` is equivalent to ``chan.setblocking(1)``.
|
``chan.settimeout(None)`` is equivalent to ``chan.setblocking(1)``.
|
||||||
|
|
||||||
:param timeout: seconds to wait for a pending read/write operation
|
:param float timeout:
|
||||||
before raising ``socket.timeout``, or ``None`` for no timeout.
|
seconds to wait for a pending read/write operation before raising
|
||||||
:type timeout: float
|
``socket.timeout``, or ``None`` for no timeout.
|
||||||
"""
|
"""
|
||||||
self.timeout = timeout
|
self.timeout = timeout
|
||||||
|
|
||||||
|
@ -518,9 +492,6 @@ class Channel (object):
|
||||||
Returns the timeout in seconds (as a float) associated with socket
|
Returns the timeout in seconds (as a float) associated with socket
|
||||||
operations, or ``None`` if no timeout is set. This reflects the last
|
operations, or ``None`` if no timeout is set. This reflects the last
|
||||||
call to `setblocking` or `settimeout`.
|
call to `setblocking` or `settimeout`.
|
||||||
|
|
||||||
:return: timeout in seconds, or ``None``.
|
|
||||||
:rtype: float
|
|
||||||
"""
|
"""
|
||||||
return self.timeout
|
return self.timeout
|
||||||
|
|
||||||
|
@ -539,9 +510,8 @@ class Channel (object):
|
||||||
``chan.setblocking(0)`` is equivalent to ``chan.settimeout(0)``;
|
``chan.setblocking(0)`` is equivalent to ``chan.settimeout(0)``;
|
||||||
``chan.setblocking(1)`` is equivalent to ``chan.settimeout(None)``.
|
``chan.setblocking(1)`` is equivalent to ``chan.settimeout(None)``.
|
||||||
|
|
||||||
:param blocking: 0 to set non-blocking mode; non-0 to set blocking
|
:param int blocking:
|
||||||
mode.
|
0 to set non-blocking mode; non-0 to set blocking mode.
|
||||||
:type blocking: int
|
|
||||||
"""
|
"""
|
||||||
if blocking:
|
if blocking:
|
||||||
self.settimeout(None)
|
self.settimeout(None)
|
||||||
|
@ -551,12 +521,10 @@ class Channel (object):
|
||||||
def getpeername(self):
|
def getpeername(self):
|
||||||
"""
|
"""
|
||||||
Return the address of the remote side of this Channel, if possible.
|
Return the address of the remote side of this Channel, if possible.
|
||||||
This is just a wrapper around ``'getpeername'`` on the Transport, used
|
|
||||||
to provide enough of a socket-like interface to allow asyncore to work.
|
|
||||||
(asyncore likes to call ``'getpeername'``.)
|
|
||||||
|
|
||||||
:return: the address if the remote host, if known
|
This simply wraps `.Transport.getpeername`, used to provide enough of a
|
||||||
:rtype: tuple(str, int)
|
socket-like interface to allow asyncore to work. (asyncore likes to
|
||||||
|
call ``'getpeername'``.)
|
||||||
"""
|
"""
|
||||||
return self.transport.getpeername()
|
return self.transport.getpeername()
|
||||||
|
|
||||||
|
@ -592,9 +560,9 @@ class Channel (object):
|
||||||
channel. A ``False`` result does not mean that the channel has closed;
|
channel. A ``False`` result does not mean that the channel has closed;
|
||||||
it means you may need to wait before more data arrives.
|
it means you may need to wait before more data arrives.
|
||||||
|
|
||||||
:return: ``True`` if a `recv` call on this channel would immediately
|
:return:
|
||||||
return at least one byte; ``False`` otherwise.
|
``True`` if a `recv` call on this channel would immediately return
|
||||||
:rtype: boolean
|
at least one byte; ``False`` otherwise.
|
||||||
"""
|
"""
|
||||||
return self.in_buffer.read_ready()
|
return self.in_buffer.read_ready()
|
||||||
|
|
||||||
|
@ -605,13 +573,11 @@ class Channel (object):
|
||||||
received at once is specified by ``nbytes``. If a string of length zero
|
received at once is specified by ``nbytes``. If a string of length zero
|
||||||
is returned, the channel stream has closed.
|
is returned, the channel stream has closed.
|
||||||
|
|
||||||
:param nbytes: maximum number of bytes to read.
|
:param int nbytes: maximum number of bytes to read.
|
||||||
:type nbytes: int
|
:return: received data, as a `str`
|
||||||
:return: data.
|
|
||||||
:rtype: str
|
|
||||||
|
|
||||||
:raises socket.timeout: if no data is ready before the timeout set by
|
:raises socket.timeout:
|
||||||
`settimeout`.
|
if no data is ready before the timeout set by `settimeout`.
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
out = self.in_buffer.read(nbytes, self.timeout)
|
out = self.in_buffer.read(nbytes, self.timeout)
|
||||||
|
@ -636,9 +602,9 @@ class Channel (object):
|
||||||
`invoke_shell` without a pty will ever have data on the stderr
|
`invoke_shell` without a pty will ever have data on the stderr
|
||||||
stream.
|
stream.
|
||||||
|
|
||||||
:return: ``True`` if a `recv_stderr` call on this channel would
|
:return:
|
||||||
immediately return at least one byte; ``False`` otherwise.
|
``True`` if a `recv_stderr` call on this channel would immediately
|
||||||
:rtype: boolean
|
return at least one byte; ``False`` otherwise.
|
||||||
|
|
||||||
.. versionadded:: 1.1
|
.. versionadded:: 1.1
|
||||||
"""
|
"""
|
||||||
|
@ -653,10 +619,8 @@ class Channel (object):
|
||||||
specified by ``nbytes``. If a string of length zero is returned, the
|
specified by ``nbytes``. If a string of length zero is returned, the
|
||||||
channel stream has closed.
|
channel stream has closed.
|
||||||
|
|
||||||
:param nbytes: maximum number of bytes to read.
|
:param int nbytes: maximum number of bytes to read.
|
||||||
:type nbytes: int
|
:return: received data as a `str`
|
||||||
:return: data.
|
|
||||||
:rtype: str
|
|
||||||
|
|
||||||
:raises socket.timeout: if no data is ready before the timeout set by
|
:raises socket.timeout: if no data is ready before the timeout set by
|
||||||
`settimeout`.
|
`settimeout`.
|
||||||
|
@ -688,9 +652,9 @@ class Channel (object):
|
||||||
outbound buffer, a `send` call will succeed immediately and return
|
outbound buffer, a `send` call will succeed immediately and return
|
||||||
the number of bytes actually written.
|
the number of bytes actually written.
|
||||||
|
|
||||||
:return: ``True`` if a `send` call on this channel would immediately
|
:return:
|
||||||
succeed or fail
|
``True`` if a `send` call on this channel would immediately succeed
|
||||||
:rtype: boolean
|
or fail
|
||||||
"""
|
"""
|
||||||
self.lock.acquire()
|
self.lock.acquire()
|
||||||
try:
|
try:
|
||||||
|
@ -708,10 +672,8 @@ class Channel (object):
|
||||||
transmitted, the application needs to attempt delivery of the remaining
|
transmitted, the application needs to attempt delivery of the remaining
|
||||||
data.
|
data.
|
||||||
|
|
||||||
:param s: data to send
|
:param str s: data to send
|
||||||
:type s: str
|
:return: number of bytes actually sent, as an `int`
|
||||||
:return: number of bytes actually sent
|
|
||||||
:rtype: int
|
|
||||||
|
|
||||||
:raises socket.timeout: if no data could be sent before the timeout set
|
:raises socket.timeout: if no data could be sent before the timeout set
|
||||||
by `settimeout`.
|
by `settimeout`.
|
||||||
|
@ -743,13 +705,11 @@ class Channel (object):
|
||||||
data has been sent: if only some of the data was transmitted, the
|
data has been sent: if only some of the data was transmitted, the
|
||||||
application needs to attempt delivery of the remaining data.
|
application needs to attempt delivery of the remaining data.
|
||||||
|
|
||||||
:param s: data to send.
|
:param str s: data to send.
|
||||||
:type s: str
|
:return: number of bytes actually sent, as an `int`.
|
||||||
:return: number of bytes actually sent.
|
|
||||||
:rtype: int
|
|
||||||
|
|
||||||
:raises socket.timeout: if no data could be sent before the timeout set
|
:raises socket.timeout:
|
||||||
by `settimeout`.
|
if no data could be sent before the timeout set by `settimeout`.
|
||||||
|
|
||||||
.. versionadded:: 1.1
|
.. versionadded:: 1.1
|
||||||
"""
|
"""
|
||||||
|
@ -778,15 +738,15 @@ class Channel (object):
|
||||||
`send`, this method continues to send data from the given string until
|
`send`, this method continues to send data from the given string until
|
||||||
either all data has been sent or an error occurs. Nothing is returned.
|
either all data has been sent or an error occurs. Nothing is returned.
|
||||||
|
|
||||||
:param s: data to send.
|
:param str s: data to send.
|
||||||
:type s: str
|
|
||||||
|
|
||||||
:raises socket.timeout: if sending stalled for longer than the timeout
|
:raises socket.timeout:
|
||||||
set by `settimeout`.
|
if sending stalled for longer than the timeout set by `settimeout`.
|
||||||
:raises socket.error: if an error occured before the entire string was
|
:raises socket.error:
|
||||||
sent.
|
if an error occured before the entire string was sent.
|
||||||
|
|
||||||
.. note:: If the channel is closed while only part of the data hase been
|
.. note::
|
||||||
|
If the channel is closed while only part of the data hase been
|
||||||
sent, there is no way to determine how much data (if any) was sent.
|
sent, there is no way to determine how much data (if any) was sent.
|
||||||
This is irritating, but identically follows Python's API.
|
This is irritating, but identically follows Python's API.
|
||||||
"""
|
"""
|
||||||
|
@ -805,13 +765,12 @@ class Channel (object):
|
||||||
from the given string until all data has been sent or an error occurs.
|
from the given string until all data has been sent or an error occurs.
|
||||||
Nothing is returned.
|
Nothing is returned.
|
||||||
|
|
||||||
:param s: data to send to the client as "stderr" output.
|
:param str s: data to send to the client as "stderr" output.
|
||||||
:type s: str
|
|
||||||
|
|
||||||
:raises socket.timeout: if sending stalled for longer than the timeout
|
:raises socket.timeout:
|
||||||
set by `settimeout`.
|
if sending stalled for longer than the timeout set by `settimeout`.
|
||||||
:raises socket.error: if an error occured before the entire string was
|
:raises socket.error:
|
||||||
sent.
|
if an error occured before the entire string was sent.
|
||||||
|
|
||||||
.. versionadded:: 1.1
|
.. versionadded:: 1.1
|
||||||
"""
|
"""
|
||||||
|
@ -828,8 +787,7 @@ class Channel (object):
|
||||||
``mode`` and ``bufsize`` arguments are interpreted the same way as by
|
``mode`` and ``bufsize`` arguments are interpreted the same way as by
|
||||||
the built-in ``file()`` function in Python.
|
the built-in ``file()`` function in Python.
|
||||||
|
|
||||||
:return: object which can be used for Python file I/O.
|
:return: `.ChannelFile` object which can be used for Python file I/O.
|
||||||
:rtype: `.ChannelFile`
|
|
||||||
"""
|
"""
|
||||||
return ChannelFile(*([self] + list(params)))
|
return ChannelFile(*([self] + list(params)))
|
||||||
|
|
||||||
|
@ -844,8 +802,7 @@ class Channel (object):
|
||||||
client, it only makes sense to open this file for reading. For a
|
client, it only makes sense to open this file for reading. For a
|
||||||
server, it only makes sense to open this file for writing.
|
server, it only makes sense to open this file for writing.
|
||||||
|
|
||||||
:return: object which can be used for Python file I/O.
|
:return: `.ChannelFile` object which can be used for Python file I/O.
|
||||||
:rtype: `.ChannelFile`
|
|
||||||
|
|
||||||
.. versionadded:: 1.1
|
.. versionadded:: 1.1
|
||||||
"""
|
"""
|
||||||
|
@ -863,11 +820,10 @@ class Channel (object):
|
||||||
(You won't notice this effect unless you have hundreds of channels
|
(You won't notice this effect unless you have hundreds of channels
|
||||||
open at the same time.)
|
open at the same time.)
|
||||||
|
|
||||||
:return: an OS-level file descriptor
|
:return: an OS-level file descriptor (`int`)
|
||||||
:rtype: int
|
|
||||||
|
|
||||||
.. warning:: This method causes channel reads to be slightly less
|
.. warning::
|
||||||
efficient.
|
This method causes channel reads to be slightly less efficient.
|
||||||
"""
|
"""
|
||||||
self.lock.acquire()
|
self.lock.acquire()
|
||||||
try:
|
try:
|
||||||
|
@ -889,9 +845,9 @@ class Channel (object):
|
||||||
are disallowed. If ``how`` is 2, further sends and receives are
|
are disallowed. If ``how`` is 2, further sends and receives are
|
||||||
disallowed. This closes the stream in one or both directions.
|
disallowed. This closes the stream in one or both directions.
|
||||||
|
|
||||||
:param how: 0 (stop receiving), 1 (stop sending), or 2 (stop
|
:param int how:
|
||||||
receiving and sending).
|
0 (stop receiving), 1 (stop sending), or 2 (stop receiving and
|
||||||
:type how: int
|
sending).
|
||||||
"""
|
"""
|
||||||
if (how == 0) or (how == 2):
|
if (how == 0) or (how == 2):
|
||||||
# feign "read" shutdown
|
# feign "read" shutdown
|
||||||
|
@ -1246,8 +1202,6 @@ class ChannelFile (BufferedFile):
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
"""
|
"""
|
||||||
Returns a string representation of this object, for debugging.
|
Returns a string representation of this object, for debugging.
|
||||||
|
|
||||||
:rtype: str
|
|
||||||
"""
|
"""
|
||||||
return '<paramiko.ChannelFile from ' + repr(self.channel) + '>'
|
return '<paramiko.ChannelFile from ' + repr(self.channel) + '>'
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue