|  |  |  | @ -125,6 +125,21 @@ def is_executable_file(path): | 
			
		
	
		
			
				
					|  |  |  |  |   # Ref: http://stackoverflow.com/questions/377017/test-if-executable-exists-in-python | 
			
		
	
		
			
				
					|  |  |  |  |   return os.path.isfile(path) and os.access(path, os.X_OK) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def is_writable(path): | 
			
		
	
		
			
				
					|  |  |  |  |   """Determines whether a path exists and is writable by the current user, | 
			
		
	
		
			
				
					|  |  |  |  |   like the `test -w' shell command. | 
			
		
	
		
			
				
					|  |  |  |  |   """ | 
			
		
	
		
			
				
					|  |  |  |  |   # Ref: http://stackoverflow.com/questions/2113427/determining-whether-a-directory-is-writeable | 
			
		
	
		
			
				
					|  |  |  |  |   # Ref: http://stackoverflow.com/a/2113750/655885 | 
			
		
	
		
			
				
					|  |  |  |  |   return os.access(path, os.W_OK) # W_OK is for writing, R_OK for reading, etc. | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def is_readable(path): | 
			
		
	
		
			
				
					|  |  |  |  |   """Determines whether a path exists and is readable by the current user, | 
			
		
	
		
			
				
					|  |  |  |  |   like the `test -r' shell command. | 
			
		
	
		
			
				
					|  |  |  |  |   """ | 
			
		
	
		
			
				
					|  |  |  |  |   return os.access(path, os.R_OK) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def dirname2(path): | 
			
		
	
		
			
				
					|  |  |  |  |   """Returns the directory part of a path. | 
			
		
	
		
			
				
					|  |  |  |  |   The difference from os.path.dirname is that if the directory | 
			
		
	
	
		
			
				
					|  |  |  | 
 |