2017-03-09 35 views
1

由于未知原因,Amazon的Lambda服务需要在我们上传的ZIP文件中设置本地库的权限。这在Windows中并不容易。在Python生成的ZIP文件中更改主机操作系统

我发现了一些Python代码,并适应它来设置764个权限我需要:

import zipfile 
import os 

srcFileName = os.getcwd() + '\\bin\\Release\\netcoreapp1.0\\input.zip' 
tmpFileName = os.getcwd() + '\\bin\\Release\\netcoreapp1.0\\publish.zip' 

with zipfile.ZipFile(srcFileName, 'r') as sz: 
    with zipfile.ZipFile(tmpFileName, 'w', zipfile.ZIP_DEFLATED) as z: 
     for name in sz.namelist(): 
      srcFile = sz.open(name, "r") 
      print(name) 
      zi = zipfile.ZipInfo(name) 
      zi.external_attr = (0o764 << 16) 
      z.writestr(zi, sz.read(name)) 
     z.close() 
     sz.close() 

但后来我打问题二:ZIP文件存储的文件添加到归档主机OS (规格在这里:http://www.fileformat.info/format/zip/corion.htm

单独设置权限不会被Amazon接受。如果我十六进制编辑压缩文件并将操作系统从Windows更改为Unix,则该权限将被Amazon接受。

有没有什么办法可以使用Python zip功能以编程方式设置主机操作系统?

回答

1

好吧,我是个白痴。这里肯定需要RTFM。

我发现zi.create_system = 3可以应用到更改主机操作系统UNIX:

进口压缩文件 进口OS

srcFileName = os.getcwd() + '\\bin\\Release\\netcoreapp1.0\\input.zip' 
tmpFileName = os.getcwd() + '\\bin\\Release\\netcoreapp1.0\\publish.zip' 

with zipfile.ZipFile(srcFileName, 'r') as sz: 
    with zipfile.ZipFile(tmpFileName, 'w', zipfile.ZIP_DEFLATED) as z: 
     for name in sz.namelist(): 
      srcFile = sz.open(name, "r") 
      print(name) 
      zi = zipfile.ZipInfo(name) 
      zi.create_system = 3 
      zi.external_attr = (0o764 << 16) 
      z.writestr(zi, sz.read(name)) 
     z.close() 
     sz.close() 
相关问题