在可移植python scrip中的ZipFile中设置unix权限

2024-09-26 22:07:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个python脚本,它将许多文件放在一个“staging”目录树中,然后使用ZipFile创建它们的.zip存档。这将在稍后被复制到linux机器上,该机器将提取文件并使用它们。暂存目录包含文本和二进制数据文件的混合。进行书写的部分位于“try”块中:

try:
    import zipfile
    zipf = zipfile.ZipFile(out_file, 'w', zipfile.ZIP_DEFLATED)
    for root, dirs, files in os.walk(staging_dir):
        for d in dirs:
            # Write directories so even empty directories are copied:
            arcname = os.path.relpath(os.path.join(root, d), staging_dir)
            zipf.write(os.path.join(root, d), arcname)
        for f in files:
            arcname = os.path.relpath(os.path.join(root, f), staging_dir)
            zipf.write(os.path.join(root, f), arcname)

这在运行Python2.7(我的主要目标)或3.x(次要目标)的linux机器上运行。它也可以在Windows机器上运行(事后想起来,这可能很有用),但在这种情况下,权限存在问题。通常,脚本使用“os.chmod”在staging_dir中的文件中设置权限,然后zip使用正确的权限创建存档。但在windows上运行此命令时,“os.chmod”命令并没有真正设置所有linux文件模式(不可能),因此zipfile内容的权限不正确。我试图找出在上面的代码中创建zipfile时是否有办法修复权限。特别是,暂存目录/bin中的文件需要具有“0o750”权限

我已经看到了How do I set permissions (attributes) on a file in a ZIP file using Python's zipfile module的答案,因此我看到了如何使用“external_attr”设置权限,然后使用“ZipFile.writestr”编写一个文件。但是“外部属性”似乎不适用于“ZipFile.write”,而只适用于“ZipFile.writest”。我想在一个包含一些二进制文件的zip存档上做这个。除了“writest”之外还有其他选择吗?可以在大型二进制文件上使用“writestr”吗


Tags: 文件pathin目录机器权限osdir

热门问题