2017-03-09 50 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() 
相關問題