I made a script that will map me a directory and give me stats about it ... Here's the script:
import os
import hashlib
import platform
import sys
import argparse
import HTML
class Map(object):
def __init__(self,param):
self.param_list = param
self.slash = self.slash_by_os()
self.result_list = []
self.os = ""
def calc_md5(self,file_path):
with open(file_path) as file_to_check:
data = file_to_check.read()
md5_returned = hashlib.md5(data).hexdigest()
return md5_returned
def slash_by_os(self):
general_id = platform.system()
actual_os = ""
if general_id == "Darwin" or general_id == "darwin":
actual_os = "UNIX"
elif general_id == "Linux" or general_id == "linux":
actual_os = "UNIX"
elif general_id == "SunOS":
actual_os = "UNIX"
elif general_id == "Windows" or general_id == "windows":
actual_os = "WIN"
else:
actual_os = general_id
if actual_os == "UNIX":
return '/'
elif actual_os == "WIN":
return '\\'
else:
return '/'
self.os = actual_os
def what_to_do(self,new_dir):
act = []
act.append(new_dir[:-1])
for param in self.param_list:
if param == "md5":
x = self.calc_md5(new_dir[:-1])
act.append(x)
elif param == "size":
x = os.stat(new_dir[:-1]).st_size
act.append(x)
elif param == "access":
x = os.stat(new_dir[:-1]).st_atime
act.append(x)
elif param == "modify":
x = os.stat(new_dir[:-1]).st_mtime
act.append(x)
elif param == "creation":
x = os.stat(new_dir[:-1]).st_ctime
act.append(x)
return act
def list_of_files(self ,dir_name ,traversed = [], results = []):
dirs = os.listdir(dir_name)
if dirs:
for f in dirs:
new_dir = dir_name + f + self.slash
if os.path.isdir(new_dir) and new_dir not in traversed:
traversed.append(new_dir)
self.list_of_files(new_dir, traversed, results)
else:
act = self.what_to_do(new_dir)
results.append(act)
self.result_list = results
return results
def parse_args():
desc = "Welcom To dirmap.py 1.0"
parser = argparse.ArgumentParser(description=desc)
parser.add_argument('-p','--path', help='Path To Original Directory', required=True)
parser.add_argument('-md','--md5', action = 'store_true',help='Show md5 hash of file', required=False)
parser.add_argument('-s','--size', action = 'store_true', help='Show size of file', required=False)
parser.add_argument('-a','--access', action = 'store_true', help='Show access time of file', required=False)
parser.add_argument('-m','--modify', action = 'store_true', help='Show modification time of file', required=False)
parser.add_argument('-c','--creation', action = 'store_true', help='Show creation of file', required=False)
args = vars(parser.parse_args())
params = []
for key,value in args.iteritems():
if value == True:
params.append(key)
return args,params
def main():
args , params = parse_args()
dir_path = args['path']
map = Map(params)
dir_list = map.list_of_files(dir_path)
params.insert(0,"path")
htmlcode_dir = HTML.table(dir_list,header_row=params)
print htmlcode_dir
main()
and while running on linux env i get this traceback:
MacBook-Pro:Python Scripts Daniel$ python dirmap.py -p / -md -s -a -m -c >> 1.html Traceback (most recent call last): File "dirmap.py", line 132, in main() File "dirmap.py", line 124, in main dir_list = map.list_of_files(dir_path) File "dirmap.py", line 89, in list_of_files act = self.what_to_do(new_dir) File "dirmap.py", line 61, in what_to_do x = self.calc_md5(new_dir[:-1]) File "dirmap.py", line 25, in calc_md5 with open(file_path, 'rb') as file_to_check: IOError: [Errno 102] Operation not supported on socket: '/.dbfseventsd'
How could I fix my problem?? Thanks !
The problem is when open() runs over sockets when it scans various files. You should be able to solve this with a try/catch, by catching IOError. Example:
But this will catch ALL io errors, not just sockets. If you want an error message that handles this specific scenario, you need to check if this is a socket before you try to open it. See this for how to check if a file is a socket.
Also, I noticed you were manually checking the platform for which file separator to use. It's builtin as 'os.path.sep'. Check out the python os.path module for more platform independent ways to traverse filesystems.