STINNER Victor <[email protected]> added the comment:
I discussed with Jay Yin on IRC and we understood the issue on his setup: the
last entry of his PATH environment variable is a path to an existing *file*,
not a directory.
In this case, subprocess.Popen() fails with ENOTDIR if the program cannot be
found in any other directory of the PATH.
Copy of _posixmodule.c:
---
/* This loop matches the Lib/os.py _execvpe()'s PATH search when */
/* given the executable_list generated by Lib/subprocess.py. */
saved_errno = 0;
for (i = 0; exec_array[i] != NULL; ++i) {
const char *executable = exec_array[i];
if (envp) {
execve(executable, argv, envp);
} else {
execv(executable, argv);
}
if (errno != ENOENT && errno != ENOTDIR && saved_errno == 0) {
saved_errno = errno;
}
}
/* Report the first exec error, not the last. */
if (saved_errno)
errno = saved_errno;
---
If the first execv() calls with ENOENT and the last one fails with ENOTDIR, the
function fails with ENOTDIR.
----------
nosy: +vstinner
title: Failing test_dtrace and test_subprocess on Ubuntu 16.04 on master ->
test_subprocess and test_dtrace fails if the last entry of $PATH is a file
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue32667>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com