Open
Description
It would be neat to be able to read a remote file to a variable.
Here's my hacky implementation:
from pssh.ssh2_client import SSHClient
from pssh.native._ssh2 import wait_select
from pssh.constants import DEFAULT_RETRIES, RETRY_DELAY
from ssh2.error_codes import LIBSSH2_ERROR_EAGAIN
from ssh2.sftp import LIBSSH2_FXF_READ, LIBSSH2_SFTP_S_IRUSR
class MySSH2Client(SSHClient):
def __init__(self, host,
user=None,
password=None,
port=None,
pkey=None,
num_retries=DEFAULT_RETRIES,
retry_delay=RETRY_DELAY,
allow_agent=True,
timeout=None):
SSHClient.__init__(self, host, user, password, port, pkey, num_retries, retry_delay, allow_agent, timeout)
def read(self, remote_file, sftp=None):
sftp = self._make_sftp() if sftp is None else sftp
text = ""
with self._sftp_openfh(
sftp.open, remote_file,
LIBSSH2_FXF_READ, LIBSSH2_SFTP_S_IRUSR) as remote_fh:
for size, data in remote_fh:
if size == LIBSSH2_ERROR_EAGAIN:
wait_select(self.session)
continue
text += data
return text
Best Wishes,
Clay