Skip to content

Commit cb5b2d9

Browse files
committed
ENH: Better emulate Python 3.3+ shutil.which
1 parent d491c8b commit cb5b2d9

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

nipype/interfaces/base/core.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -989,7 +989,10 @@ def _run_interface(self, runtime, correct_return_codes=(0, )):
989989

990990
# which $cmd
991991
executable_name = shlex.split(self._cmd_prefix + self.cmd)[0]
992-
cmd_path = which(executable_name, env=runtime.environ)
992+
if os.path.isfile(executable_name):
993+
cmd_path = executable_name
994+
else:
995+
cmd_path = which(executable_name, env=runtime.environ)
993996

994997
if cmd_path is None:
995998
raise IOError(

nipype/utils/filemanip.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -774,12 +774,20 @@ def which(cmd, env=None, pathext=None):
774774
return filename
775775
return None
776776

777+
def isexec(path):
778+
return os.path.isfile(path) and os.access(path, os.X_OK)
779+
777780
for ext in pathext:
778781
extcmd = cmd + ext
779-
for directory in path.split(os.pathsep):
780-
filename = op.join(directory, extcmd)
781-
if op.exists(filename):
782-
return filename
782+
fpath, fname = os.path.split(extcmd)
783+
if fpath:
784+
if isexec(fpath):
785+
return extcmd
786+
else:
787+
for directory in path.split(os.pathsep):
788+
filename = op.join(directory, extcmd)
789+
if isexec(filename):
790+
return filename
783791
return None
784792

785793

0 commit comments

Comments
 (0)