通过Paramiko和Python上传后解压缩文件

时间:2019-05-13 22:59:18

标签: python sftp paramiko

我正在尝试使用Python和Paramiko传输zip文件。传输部分工作正常,但我需要将文件解压缩到SFTP主机上。 (该文件太大,无法在压缩前进行传输。) 我对此程序包的大部分代码引用均已编写:https://github.com/yunojuno/lambda-s3-sftp/blob/master/s3_to_sftp.py#L189 但是找不到找到解压缩部分的方法。

我尝试使用zipfile包进行解压缩,但是似乎可以在运行Lambda函数的文件夹中执行我的python代码,而不是在主机上。

SFTP连接:

sftp_client, transport = connect_to_sftp(
        hostname=SSH_HOST,
        port=SSH_PORT,
        username=SSH_USERNAME,
        password=SSH_PASSWORD,
        pkey=key_obj
    )

def connect_to_sftp(hostname, port, username, password, pkey):
    """Connect to SFTP server and return client object."""
    transport = paramiko.Transport((hostname, port))
    transport.connect(username=username, password=password, pkey=pkey)
    client = paramiko.SFTPClient.from_transport(transport)
    logger.debug(f"S3-SFTP: Connected to remote SFTP server")
    return client, transport

我尝试解压缩的部分:

logger.info('S3-SFTP: Unzipping file')
fh = sftp_client.open(filename, 'rb')
z = zipfile.ZipFile(fh)
for name in z.namelist():
    logger.info(name)
    z.extract(name) 
fh.close()

这将导致错误:“ OSError:[Errno 30]只读文件系统:'/ var / task / filename.txt'”

0 个答案:

没有答案