我正在尝试使用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'”