मैं फ़ाइलों, फ़ोल्डरों और एक निष्पादन योग्य ज़िप संग्रह को अनज़िप करने के लिए मैक पर ज़िपफाइल (पायथन 3.6) का उपयोग कर रहा हूं। निष्पादन योग्य PyInstaller के साथ बनाया गया था और मैक पर ज़िप किया गया था। जब मैं संग्रह को अनज़िप करता हूं तो यह निष्पादन योग्य को यूनिक्स निष्पादन योग्य फ़ाइल प्रकार से टेक्स्टएडिट फ़ाइल प्रकार में बदल देता है। जब मैं मैन्युअल रूप से अनज़िप करता हूं तो सब कुछ सही ढंग से काम करता है और वांछित यूनिक्स निष्पादन योग्य फ़ाइल में परिणाम देता है। सब कुछ विंडोज़ पर अपेक्षित काम करता है।

मुझे यकीन नहीं है कि इसे ज़िप के उदाहरण के साथ कैसे पोस्ट किया जाए क्योंकि मुझे यकीन है कि लोग एक हस्ताक्षरित exe फ़ाइल के साथ काम करने में संकोच करेंगे, लेकिन मेरा कोड नीचे है।

ध्यान दें कि मैंने अनुमतियों को बदलने के लिए os.chmod का उपयोग करके समस्या को ठीक करने का प्रयास किया लेकिन यह काम नहीं किया:

import zipfile
import os
zip_path = '/Applications/testzip/example.zip'
zip_dir = '/Applications/testzip'

zf = zipfile.ZipFile(zip_path)

for file in zf.infolist():
    path = os.path.join(file.filename, zip_dir)
    os.chmod(path, 0o0755)
    zf.extract(file.filename, zip_dir)

zf.close()
print('done')
0
Mike Bourbeau 10 सितंबर 2020, 06:16

1 उत्तर

सबसे बढ़िया उत्तर

सुनिश्चित नहीं है कि यह करने के बारे में जाने का यह सबसे अच्छा तरीका है, लेकिन मैं निष्कर्षण के बाद अनुमतियों को बदलने के लिए सबप्रोसेस का उपयोग करके इसे काम करने में सक्षम था। बहुत धीमा लगता है, लेकिन यह काम करता है।

import zipfile
import subprocess
import os
zip_path = '/Applications/testzip/armada_pipeline.zip'
zip_dir = '/Applications/testzip'

zf = zipfile.ZipFile(zip_path)

for file in zf.infolist():
    path = os.path.join(zip_dir, file.filename)
    zf.extract(file, zip_dir)
    subprocess.call(['chmod', 'u+x', path])

zf.close()
print('done')
0
Mike Bourbeau 13 सितंबर 2020, 05:49