Skip to content
Snippets Groups Projects
Commit 9a64ec3d authored by Marco Biasini's avatar Marco Biasini
Browse files

settings.Locate: check if file is executable

parent 4bd43bc0
No related branches found
No related tags found
No related merge requests found
...@@ -58,6 +58,8 @@ def Locate(file_name, explicit_file_name=None, search_paths=[], ...@@ -58,6 +58,8 @@ def Locate(file_name, explicit_file_name=None, search_paths=[],
error message is formatted in such a way that it can directly be presented to error message is formatted in such a way that it can directly be presented to
the user. the user.
""" """
def _is_executable(filename):
return os.path.exists(filename) and os.access(filename, os.X_OK)
if type(file_name) is str: if type(file_name) is str:
file_names=[file_name] file_names=[file_name]
else: else:
...@@ -66,14 +68,14 @@ def Locate(file_name, explicit_file_name=None, search_paths=[], ...@@ -66,14 +68,14 @@ def Locate(file_name, explicit_file_name=None, search_paths=[],
epxl_inexistent='explicitly set file "%s" does not exist' epxl_inexistent='explicitly set file "%s" does not exist'
set_env_var='set the environment variable %s to the absolute path to %s or ' set_env_var='set the environment variable %s to the absolute path to %s or '
if explicit_file_name: if explicit_file_name:
if os.path.exists(explicit_file_name): if _is_executable(explicit_file_name):
return explicit_file_name return explicit_file_name
else: else:
raise FileNotFound(file_name, epxl_inexistent % explicit_file_name) raise FileNotFound(file_name, epxl_inexistent % explicit_file_name)
if env_name: if env_name:
file_env_name=os.getenv(env_name, None) file_env_name=os.getenv(env_name, None)
if file_env_name: if file_env_name:
if os.path.exists(file_env_name): if _is_executable(file_env_name):
return file_env_name return file_env_name
else: else:
raise FileNotFound(file_name, raise FileNotFound(file_name,
...@@ -82,7 +84,7 @@ def Locate(file_name, explicit_file_name=None, search_paths=[], ...@@ -82,7 +84,7 @@ def Locate(file_name, explicit_file_name=None, search_paths=[],
for search_path in search_paths: for search_path in search_paths:
for file_name in file_names: for file_name in file_names:
full_file_name=os.path.join(search_path, file_name) full_file_name=os.path.join(search_path, file_name)
if os.path.exists(full_file_name): if _is_executable(full_file_name):
return full_file_name return full_file_name
if search_system_paths: if search_system_paths:
...@@ -94,7 +96,7 @@ def Locate(file_name, explicit_file_name=None, search_paths=[], ...@@ -94,7 +96,7 @@ def Locate(file_name, explicit_file_name=None, search_paths=[],
for path in searched: for path in searched:
for file_name in file_names: for file_name in file_names:
full_file_name=os.path.join(path, file_name) full_file_name=os.path.join(path, file_name)
if os.path.exists(full_file_name): if _is_executable(full_file_name):
return full_file_name return full_file_name
msg='' msg=''
if len(searched)>0: if len(searched)>0:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment