Deepak
Deepak

Reputation: 96

python giving error in extracting a file from the file

Python code:

import tarfile,os
import sys
def extract_system_report (tar_file_path):
    extract_path = ""
    tar = tarfile.open(sys.argv[1])
    for member in tar.getmembers():
        print ("member_name is: ")
        print (member.name)
        tar.extract(member.name, "./crachinfo/")
extract_system_report(sys.argv[1])

while extracting the file getting below error:

>> python tar_read.py /nobackup/deepakhe/POLARIS_POJECT_09102019/hackathon_2021/a.tar.gz 

member_name is: 
/bootflash/.prst_sync/reload_info

Traceback (most recent call last):
  File "tar_read.py", line 38, in <module>
    extract_system_report(sys.argv[1])
  File "tar_read.py", line 10, in extract_system_report
    tar.extract(member.name, "./crachinfo/")
  File "/auto/pysw/cel8x/python64/3.6.10/lib/python3.6/tarfile.py", line 2052, in extract
    numeric_owner=numeric_owner)
  File "/auto/pysw/cel8x/python64/3.6.10/lib/python3.6/tarfile.py", line 2114, in _extract_member
    os.makedirs(upperdirs)
  File "/auto/pysw/cel8x/python64/3.6.10/lib/python3.6/os.py", line 210, in makedirs
    makedirs(head, mode, exist_ok)
  File "/auto/pysw/cel8x/python64/3.6.10/lib/python3.6/os.py", line 220, in makedirs
    mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/bootflash'

I am specifying the folder to extract but still it seems trying to create a folder in the root directory. is this behavior expected? I can extract this tar file fine in file manager. is there a way to handle this in python?

Upvotes: 0

Views: 883

Answers (1)

Masklinn
Masklinn

Reputation: 42207

I am specifying the folder to extract but still it seems trying to create a folder in the root directory. is this behavior expected?

Yes. The path provided is just a "current directory", it's not a "jail". The documentation even specifically warns about it:

It is possible that files are created outside of path, e.g. members that have absolute filenames starting with "/" or filenames with two dots "..".

I can extract this tar file fine in file manager. is there a way to handle this in python?

Use extractfile to get a pseudo-file handle on the contents of the archived file, then copy that wherever you want.

Upvotes: 1

Related Questions