(Python 2.7)
我有一个程序可以从服务器下载.zip文件,其中包含我想运行的.app文件。 .zip从服务器下载得很好,尝试在Python之外提取它可以正常工作。但是,当我尝试从Python中提取zip时,.app不会运行 - 它不会说文件已损坏或损坏,它根本无法启动。我已尝试使用其他.app文件,我遇到了同样的问题,并且想知道是否有其他人之前遇到过这个问题并且有办法解决它?
我正在使用的代码:
for a in gArchives:
if (a['fname'].endswith(".build.zip") or a['fname'].endswith(".patch.zip")):
#try to extract: if not, delete corrupted zip
try :
zip_file = zipfile.ZipFile(a['fname'], 'r')
except:
os.remove(a['fname'])
for files in zip_file.namelist() :
#deletes local files in the zip that already exist
if os.path.exists(files) :
try :
os.remove(files)
except:
print("Cannot remove file")
try :
shutil.rmtree(files)
except:
print("Cannot remove directory")
try :
zip_file.extract(files)
except:
print("Extract failed")
zip_file.close()
我也尝试过使用zip_file.extractall(),我也遇到了同样的问题。
答案 0 :(得分:0)
在我的macbook pro上测试,问题似乎与Python提取文件的方式有关。
如果你跑
diff -r python_extracted_zip normal_extracted_zip
你会收到这样的信息:
File Seashore.app/Contents/Frameworks/TIFF.framework/Resources is a directory while file here/Seashore.app/Contents/Frameworks/TIFF.framework/Resources is a regular file
显然,问题在于它正在提取它们时遇到的文件名。在提取文件名时,您需要对文件名进行一些检查。
答案 1 :(得分:0)
管理自己解决这个问题 - 问题与目录未正确提取有关,但实际上与上面提到的权限有关。
使用Python提取文件时,权限不会保留在.zip中,因此所有可执行文件都设置为不可执行。通过在我提取的所有文件上调用以下内容解决了此问题,其中“path”是文件的路径:
os.chmod(path, 0755)